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



我有以下数组:

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循环似乎是最好的方法。否则,您可以例如选择filterforEach

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

方法是什么,这样我就可以在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'; });

最新更新