Вместо массива объектов рассмотрите возможность создания просто одного объекта с несколькими ключами:
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);