使用 forEach 更改对象值

Change Object Value using forEach

我正在尝试更改数组中对象的值,但是它没有按预期工作。我试过以下。

const arrObj = [
  {
    "label": "test1",
    "value": 123,
    "type": "number",
    "field": {
      "label": "another",
      "description": "abcd"
    }
  },
  {
    "label": "test2",
    "value": 111,
    "type": "number"
  },
]

arrObj.forEach(obj => {
  obj = {...obj, ...obj.field}
  delete obj.field
})

console.log("after:", arrObj);

我也找到了一些使用索引的解决方案,但是它在对象之前添加了索引。

const arrObj = [
  {
    "label": "test1",
    "value": 123,
    "type": "number",
    "field": {
      "label": "abcd",
      "description": "abcd"
    }
  },
  {
    "label": "test2",
    "value": 111,
    "type": "number"
  }
]

arrObj.forEach((obj, index) => {
  obj[index] = {...obj, ...obj.field}
  delete obj.field
})

console.log("after:", arrObj);

如何使用 forEach?

编辑:

我想删除字段对象和 assign/overwrite 外面的所有 属性。

我会使用 map 来更改数组,但您可能出于某种原因希望修改原始数组。您可以将 arrObj 重新分配给地图的输出。

const arrObj = [
  {
    "label": "test1",
    "value": 123,
    "type": "number",
    "field": {
      "label": "another",
      "description": "abcd"
    }
  },
  {
    "label": "test2",
    "value": 111,
    "type": "number"
  },
]

const newArr = arrObj.map(( obj ) => {
 const {field, ...rest} = obj
 return {...field, ...rest}
})

console.log("after:", newArr);

使用map并将结果赋值可能是更好的方法,但是如果要使用forEach,则需要在循环内赋值给原始数组:

const arrObj = [
  {
    "label": "test1",
    "value": 123,
    "type": "number",
    "field": {
      "label": "another",
      "description": "abcd"
    }
  },
  {
    "label": "test2",
    "value": 111,
    "type": "number"
  },
]

arrObj.forEach(({ field, ...rest}, idx, orig) => {
  orig[idx] = { ...rest, ...field }
})

console.log(arrObj);