javascript - 将对象内的所有字符串匹配并替换为来自另一个对象的字符串
问题描述
我有一个包含 UTF-8 字符作为字符串的对象 - 我想我可以用字符列表制作另一个对象以及我想如何替换它们?
数据对象
var data = [
{"my_string":"ABC & I","value":13,"key":8},
{"my_string":"A “B” C","value":12,"key":9}
];
替换对象
var str_to_change = [
{value: "&", replace: "&"},
{value: "“", replace: ""},
{value: "”", replace: ""}
];
我想写一个函数,只要在str_to_change.value
里面看到a data.my_string
,就把它替换为str_to_change.replace
这是更改各种字符串的最佳方法,我将如何执行?我发现了这一点:遍历对象文字并替换字符串,但它有点复杂,因为我不只是用单数字符串替换。
解决方案
考虑构造一个带有多个键的对象,而不是一个对象数组:
const replacements = {
"&": "&",
"“": '',
"”": '',
};
然后,使用键,转义正则表达式中具有特殊含义的字符,通过 连接键|
,构造正则表达式,并让替换函数访问匹配的子字符串作为replacements
对象的属性:
var str_to_change = [{value: "&", replace: "&"},
{value: "“", replace: ""},
{value: "”", replace: ""}];
const replacements = Object.fromEntries(str_to_change.map(({ value, replace }) => [value, replace]));
const escape = s => s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
const pattern = new RegExp(Object.keys(replacements).map(escape).join('|'), 'gi');
var data = [{
"my_string": "ABC & I",
"value": 13,
"key": 8
},
{
"my_string": "A “B” C",
"value": 12,
"key": 9
}];
const mappedData = data.map(({ my_string, ...rest }) => ({
...rest,
my_string: my_string.replace(
pattern,
prop => replacements[prop]
)
}));
console.log(mappedData);
推荐阅读
- c - 使用数学表达式时 C 编程中的数据大小定义
- python - 如何使用 PyVISA 控制 Tenma 72-2540 PS?
- ionic-framework - 从 URL 到达 Ionic 特定页面
- nginx - Nginx 反向代理无法代理某些 url
- logstash - 同一_id下的指定索引覆盖日志
- python-3.x - 如何传递参数以从 tkinter 调用 shell 脚本?
- javascript - 获取数据的函数保持循环运行
- apache-kafka - kafka中异步发送的确认模式有什么影响?
- r - 查找最早的间隔开始日期并提取间隔(R,lubridate)
- ios - 在iOS上显示键盘后如何固定标题?