根据字符串数组更新对象数组

Hon*_*ngh 1 javascript typescript

我正在尝试更新对象数组。该active键将根据用户的选择或字符串数​​组设置为 true。

例如,选择 后ABC, DEF,这两个 ID 的active键将设置为。true

const defaultArray = [
  {
    "active": true,
    "id": 1,
    "name": "ABC",
    "value": "1"
  },
  {
    "active": true,
    "id": 2,
    "name": "DEF",
    "value": "2"
  },
  {
    "active": true,
    "id": 3,
    "name": "GHI",
    "value": "3"
  }
]
Run Code Online (Sandbox Code Playgroud)
const selectedArray = [
  "ABC",
  "DEF"
]
Run Code Online (Sandbox Code Playgroud)

所以现在我需要根据默认数组创建一个新数组,并active=true仅为 中的字符串数组分配selecetedArray

结果看起来像

const newArray = [
  {
    "active": true,
    "id": 1,
    "name": "ABC",
    "value": "1"
  },
  {
    "active": true,
    "id": 2,
    "name": "DEF",
    "value": "2"
  },
  {
    "active": false,
    "id": 3,
    "name": "GHI",
    "value": "3"
  }
]
Run Code Online (Sandbox Code Playgroud)

我试过。

const arrCopy = [...defaultArray]
arrCopy.forEach(x => x.active = false)
arrCopy.forEach(x => {
    if(selectedArray.includes(x.name))
        x.active =  true
})

console.log(arrCopy)
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但是有没有更标准的方法来实现相同的目的。谢谢

Min*_*ina 5

您不需要两个循环来实现这一点,您可以直接map使用defaultArray.

defaultArray.map(x => ({...x, active: selectedArray.includes(x.name)}))
Run Code Online (Sandbox Code Playgroud)

defaultArray.map(x => ({...x, active: selectedArray.includes(x.name)}))
Run Code Online (Sandbox Code Playgroud)