我需要在对象数组上搜索关键字,然后替换它的所有实例。
例如,我有以下数组:
const test = [
{
marketType: 90,
displayName: "FT Total Match {scoreType} Over / Under 0.75 Remove",
},
{
marketType: 90,
displayName: "FT Total Match {scoreType} Over / Under 1 Remove",
},
]
我想在上面的数组中找到所有{scoreType}
并替换为goals
。
到目前为止,我已经尝试将数组转换为字符串,对其进行替换,然后将其转换回数组。但是,当我使用控制台记录结果时,仍然看到{scoreType}
并且没有错误。
console.log('result: ', JSON.parse(JSON.stringify(test).replace('{scoreType}', 'goals')));
谁能告诉我我做错了什么?
答案 0 :(得分:2)
只需尝试使用map
:
const result = test.map(item => ({
...item,
displayName: item.displayName.replace('{scoreType}', 'goals'),
}))
答案 1 :(得分:1)
const test = [
{
marketType: 90,
displayName: "FT Total Match {scoreType} Over / Under 0.75 Remove",
},
{
marketType: 90,
displayName: "FT Total Match {scoreType} Over / Under 1 Remove",
},
]
newTest = test.map(obj => ({...obj, displayName: obj.displayName.replace('{scoreType}', 'goals')}))
console.log(newTest);
答案 2 :(得分:1)
将对象转换为字符串然后对其进行处理是一种非常模糊的方法,并且可能导致不良的错误。
您可以使用Array#forEach
遍历数组,并使用从源字符串生成的正则表达式替换displayName
的文本。
const test = [{
marketType: 90,
displayName: "FT Total Match {scoreType} Over / Under 0.75 Remove",
},
{
marketType: 90,
displayName: "FT Total Match {scoreType} Over / Under 1 Remove",
},
];
const search = 'scoreType';
const replacement = 'goal';
test.forEach(item => {
const regex = new RegExp(`\{${search}\}`, 'g')
item.displayName = item.displayName.replace(regex, replacement);
});
console.log(test);
答案 3 :(得分:0)
使用map来迭代并替换displayName。
var updatedTest = test.map(obj => ({...obj, displayName: obj.displayName.replace('{scoreType}', 'goals')}));
答案 4 :(得分:0)
要修复原始代码,您必须使用 global 正则表达式replace
:
const test = [
{
marketType: 90,
displayName: "FT Total Match {scoreType} Over / Under 0.75 Remove",
},
{
marketType: 90,
displayName: "FT Total Match {scoreType} Over / Under 1 Remove",
},
]
console.log('result: ', JSON.parse(JSON.stringify(test).replace(/{scoreType}/g, 'goals')));