我有以下数组:
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.
我想修改原始数组。
答案 0 :(得分:2)
如果只有一个匹配项,那么您可以使用find
:
myarray.find(someobject => someobject.key == 'B').mark = "marked!"
如果你不知道匹配的数量,那么你的for
循环似乎是最好的方法。否则,你可以去filter
和forEach
:
myarray.filter(someobject => someobject.key == 'B')
.forEach(someobject => someobject.mark = "marked!")
答案 1 :(得分:1)
最好的方法是什么,以便我可以使用javascript中的map / filter函数来完成相应的代码?
不是全部,因为map
和filter
都不会修改数组。他们创造新的。你可以使用像
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'; });