You need to enable JavaScript to run this app. 如何基于另一对象数组的属性值更新目标对象数组的对应属性
优惠活动
大模型
产品
解决方案
定价
更多

如何基于另一对象数组的属性值更新目标对象数组的对应属性

问题原因

你的代码存在两个核心逻辑错误:

  • 循环driveTypeArray时每次都直接基于原始drives数组生成新的driveState,上一轮的修改会被直接覆盖,因此最终只会保留最后一次匹配到的type的修改结果
  • 没有添加multiAssign === true的判断条件,不符合规则要求

修复代码

你可以先把所有multiAssign为true的type收集到集合里,再一次性遍历drives数组修改,避免重复覆盖:

const driveTypeArray = [{
    type: "HDD",
    multiAssign: false,
    amount: 0,
  },
  {
    type: "SSD",
    multiAssign: true,
    amount: 0,
  },
  {
    type: "EXT",
    multiAssign: false,
    amount: 0,
  },
  {
    type: "NVMe",
    multiAssign: true,
    amount: 0,
  },
]
const drives = [{
    label: "SanDisk SDFJGKHR234234",
    serial: "",
    size: "255 GB",
    type: "SSD",
    ready: false,
    inProgress: false,
    progress: 0
  },
  {
    label: "TOSHIBA HDWD130 - TOSHIBA PRODUCT",
    serial: "",
    size: "2.4 TB",
    type: "HDD",
    ready: false,
    inProgress: false,
    progress: 0
  },
  {
    label: "SanDisk SDFJGKHR234234",
    serial: "",
    size: "255 GB",
    type: "NVMe",
    ready: false,
    inProgress: false,
    progress: 0
  },
  {
    label: "TOSHIBA HDWD130 - TOSHIBA PRODUCT",
    serial: "",
    size: "2.4 TB",
    type: "EXT",
    ready: false,
    inProgress: false,
    progress: 0
  },
]

// 先收集所有符合条件的type
const enabledTypes = new Set(
  driveTypeArray.filter(item => item.multiAssign).map(item => item.type)
)

const driveState = {
  drives: drives.map(drive => ({
    ...drive,
    ready: enabledTypes.has(drive.type)
  }))
}

console.log(driveState)

运行后SSD和NVMe对应的drive项ready都会为true,符合需求。

内容的提问来源于stack exchange,提问作者Tiffany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 17:15:10