我有一个对象数组,看起来像 ->
const test - [{id: '1', marks: '32'},{id: '2', marks: '31'},{id: '3', marks: '12'}]
现在,我正在尝试更新这个对象数组,以便我想在每个对象中再添加一个键值。
setPrevious = test => {
const {
nav: {
queryParams: { bspId }
}
} = stores
const copyTest = _.cloneDeep(test)
this.productCommentsAdded = copyTest?.forEach(marks => {
marks.productId = bspId
})
}
setPrevious(test)
使用这个,将 this.productCommentsAdded 设置为 undefined 。那么,这样做的正确方法是什么?更新它并分配给该变量
答案 0 :(得分:0)
forEach
不返回任何内容,因此会导致 productsCommentsAdded 始终以未定义结束。 (如果 copyTest 未定义,那也会导致这种情况,因此这可能是另一个需要研究的问题。)但假设 copyTest 已定义,一种方法是在此处使用 map
来实现您想要的,如下所示:
this.productCommentsAdded = copyTest?.map(marks => {
return {...marks, productId: bspId};
})
这将创建一个新数组,其中包含 copyTest
中每个对象的副本,(使用对象展开运算符,这就是 ...
部分的名称),并添加了一个新属性 {{ 1}} 到每个新对象。原 copyTest 数组对象不变;具有新属性的新数组由 productId
返回并分配给 map
。
有关 this.productCommentsAdded
的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
如果您不关心是否修改了原始 copyTest 数组的对象,您也可以使用 forEach 进行修改,如下所示:
map
但使用 copyTest?.forEach(marks => {
marks.productId = bspId;
})
this.productCommentsAdded = copyTest;
的第一种方法通常是更好的做法(由于改变原始数组的元素,不太可能出现令人惊讶的错误。)