JavaScript中如何逐个合并多个数组?数组对象合并失败求助
问题分析与解决方法
错误原因
Object.assign的误用:Object.assign是用于合并对象的方法,当传入数组时,数组会被当作类对象处理——它会把第二个数组的元素(以索引为键)覆盖第一个数组对应索引的元素,所以你得到的answer其实是triperrors的内容,而非预期的合并结果。- 重复键的合法性问题:你期望的结果中每个对象包含两个
equipId键,这在JavaScript中是不合法的——对象内重复的键会被后定义的覆盖,实际运行时只会保留最后一个equipId的值。
正确解决方案
方案一:修改键名,合并对应位置对象
如果需要区分两个来源的equipId,可以给它们设置不同的键名,通过map遍历数组,合并对应位置的对象:
const heatstatus = [ { equipId: "1" }, { equipId: "2" }, { equipId: "3" } ]; const triperrors = [ { equipId: "11" }, { equipId: "22" }, { equipId: "33" } ]; const answer = heatstatus.map((item, index) => ({ heatEquipId: item.equipId, tripEquipId: triperrors[index].equipId }));
输出结果:
[ { heatEquipId: '1', tripEquipId: '11' }, { heatEquipId: '2', tripEquipId: '22' }, { heatEquipId: '3', tripEquipId: '33' } ]
方案二:将相同键的值合并为数组
如果需要保留equipId作为键,可以把两个来源的值合并成数组:
const answer = heatstatus.map((item, index) => ({ equipId: [item.equipId, triperrors[index].equipId] }));
输出结果:
[ { equipId: ['1', '11'] }, { equipId: ['2', '22'] }, { equipId: ['3', '33'] } ]
内容的提问来源于stack exchange,提问作者user19476497
相关产品推荐
相关产品推荐

