用另一个对象的字符串匹配并替换对象内部的所有字符串

问题描述 投票:-1回答:1

我有一个包含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,但是它有点复杂,因为我不仅仅是用单数字符串代替。

javascript string
1个回答
3
投票

而不是对象数组,请考虑使用多个键仅构造一个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);
© www.soinside.com 2019 - 2024. All rights reserved.