我有一个包含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
内部看到data.my_string
,将其替换为str_to_change.replace
这是改变各种字符串的最佳方法,我将如何执行呢?我发现了这一点:Iterate through object literal and replace strings,但是它有点复杂,因为我不仅仅是用单数字符串代替。
而不是对象数组,请考虑使用多个键仅构造一个single对象:
const replacements = {
"&": "&",
"“": '',
"”": '',
};
然后,使用键,在正则表达式中具有特殊含义的escape字符,通过|
连接键,构造正则表达式,并具有替换函数作为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);