在对象数组中查找并替换部分属性值

时间:2018-08-03 07:14:08

标签: javascript

我需要在对象数组上搜索关键字,然后替换它的所有实例。

例如,我有以下数组:

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')));

谁能告诉我我做错了什么?

5 个答案:

答案 0 :(得分:2)

只需尝试使用map

const result = test.map(item => ({
  ...item,
  displayName: item.displayName.replace('{scoreType}', 'goals'),
}))

答案 1 :(得分:1)

您可以使用spreadArray#map做这样的事情:

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')));