如何使用单行替换JavaScript中数组中的对象?

时间:2017-05-19 09:00:55

标签: javascript arrays

给定一个包含某个对象的数组:

let array = [
  { name: 'bob', score: 12 },
  { name: 'Joe', score: 20 },
  { name: 'Sue', score: 25 }
]

如何在一行中用这个新对象替换数组中的Joe对象:

let newScoreForJoe = { name: 'Joe', score: 21 }

我知道我可以在数组中找到Joe对象的索引,然后像这样更新它:

let joeIndex = array.findIndex(x => x.name === newScoreForJoe.name)
array[joeIndex] = newScoreForJoe;

但是有没有一个优雅的单行程来实现同样的目标?

4 个答案:

答案 0 :(得分:1)

我确定这对你有多优雅但是因为你试图用相同数量的物体回归一个数组,我会这样做:

数组:

let array = [
  { name: 'bob', score: 12 },
  { name: 'Joe', score: 20 },
  { name: 'Sue', score: 25 }
]

对象:

let newScoreForJoe = { name: 'Joe', score: 21 }

替换线:

let joeIndex = array.map(x => x.name === newScoreForJoe.name ? newScoreForJoe : x)

答案 1 :(得分:1)

您可以简单地将joeIndex变量全部删除,然后执行:

array[array.findIndex(x => x.name === newScoreForJoe.name)] = newScoreForJoe;

答案 2 :(得分:0)

你可以尝试这个答案。只需更改对象属性的值。

array[1].score = 21;

答案 3 :(得分:0)

您可以使用Array#some并在回调中分配新对象。

如果没有找到任何对象,则不会发生任何分配。



let array = [{ name: 'bob', score: 12 }, { name: 'Joe', score: 20 }, { name: 'Sue', score: 25 }],
    newScoreForJoe = { name: 'Joe',score: 21 };
    
array.some((a, i, aa) => (a.name === newScoreForJoe.name && (aa[i] = newScoreForJoe)));

console.log(array);