如何基于另一对象数组的属性值更新目标对象数组的对应属性
问题原因
你的代码存在两个核心逻辑错误:
- 循环
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
相关产品推荐
相关产品推荐

