You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript根据id匹配替换数组中对应对象的实现问题

错误原因

你当前的代码硬编码了splice的操作位置,没有先根据id匹配查找array1中对应对象的实际索引,因此会出现替换位置错误、数组长度异常的问题。你给出的错误输出也说明你实际执行的splice参数和你写的不一致,大概率是误写成了splice(0, 0, array2[0])(即在索引0位置插入新元素,不删除原有元素),才会出现重复的id:145对象。

可行解决方案

方案1:生成新数组(推荐,无副作用)

先把array2转为id到对象的映射,再遍历array1匹配替换,该方案时间复杂度更低,适合数组数据量较大的场景:

const updateMap = new Map(array2.map(item => [item.id, item]))
array1 = array1.map(item => updateMap.has(item.id) ? updateMap.get(item.id) : item)

方案2:直接修改原数组(符合你原本用splice的预期)

遍历array2的更新项,先查找匹配id的索引,再执行替换操作:

array2.forEach(update => {
  const targetIdx = array1.findIndex(item => item.id === update.id)
  if (targetIdx !== -1) {
    array1.splice(targetIdx, 1, update)
  }
})

两种方案执行后,array1都会得到你预期的输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:09:03