我有以下数组:
myarray = [
{ "key": "A" },
{ "key": "B" }
]
我如何使用 JavaScript 中的映射/过滤器函数来执行等效的操作:
for (var i = 0; i < myarray.length; i++) {
if ( myarray[i].key == 'B') {
myarray[i].mark = "marked!"
}
}
在我的尝试中,我在输出中没有得到mark
属性:
myarray.filter((someobject) => someobject.key == 'B').mark = "marked!"
console.log(myarray) // this does not show the "mark" key.
注意:我想修改原始数组。
如果只有一个匹配项,则可以使用find
:
myarray.find(someobject => someobject.key == 'B').mark = "marked!"
如果您不知道匹配的数量,那么您的for
循环似乎是最好的方法。否则,您可以例如选择filter
和forEach
:
myarray.filter(someobject => someobject.key == 'B')
.forEach(someobject => someobject.mark = "marked!")
最好的
方法是什么,这样我就可以在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'; });