如何更新对象数组并将其分配给新变量

时间:2021-02-16 04:37:43

标签: javascript arrays reactjs object

我有一个对象数组,看起来像 ->

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 。那么,这样做的正确方法是什么?更新它并分配给该变量

1 个答案:

答案 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; 的第一种方法通常是更好的做法(由于改变原始数组的元素,不太可能出现令人惊讶的错误。)