如何使用map / filter修改对象数组的内容?

时间:2017-07-03 20:37:08

标签: javascript

我有以下数组:

myarray = [{ ' key':' A', }, {' key':' B'}]

最好的方法是什么,以便我可以使用javascript中的map / filter函数来完成相同的操作:

for(var i = 0; i < myarray.length; i++) {
 if( myarray[i].key == 'B') {
     myarray[i].mark = "marked!"
  }
}

当我尝试这样的事情时:

myarray.filter((someobject) => someobject.key == 'B').mark = "marked!"
console.log(myarray) // this does not show the "mark" key.

我想修改原始数组。

2 个答案:

答案 0 :(得分:2)

如果只有一个匹配项,那么您可以使用find

myarray.find(someobject => someobject.key == 'B').mark = "marked!"

如果你不知道匹配的数量,那么你的for循环似乎是最好的方法。否则,你可以去filterforEach

myarray.filter(someobject => someobject.key == 'B')
       .forEach(someobject => someobject.mark = "marked!")

答案 1 :(得分:1)

  

最好的方法是什么,以便我可以使用javascript中的map / filter函数来完成相应的代码?

不是全部,因为mapfilter 都不会修改数组。他们创造新的。你可以使用像

这样的东西
let newArray = myArray.map(({key} => ({key, marked: key=='B'}));

但与您的代码相当的最佳ES6是

for (let v of myArray) if (v.key == 'B') v.mark = 'marked';

你也可以使用forEach,但我强烈建议不要在功能方法中掩饰副作用:

myArray.filter(({key}) => key == 'B').forEach(v => { v.mark = 'marked'; });