JavaScript如何将数组中相同id的多个对象合并为单个完整对象
实现方案1:使用Map做中间存储(推荐)
该方案仅需遍历一次数组,时间复杂度为O(n),性能最优,且不会修改原数组:
const tests = [ {id: 0, vencimiento: "231216000000"}, {id: 0, monto: "99000"}, {id: 1, vencimiento: "230117000000"}, {id: 1, monto: "198000"}, {id: 2, vencimiento: "230217000000"}, {id: 2, monto: "297000"}, ]; const tempMap = new Map(); tests.forEach(item => { // 已存在同id对象则合并属性,不存在则直接存入 tempMap.set(item.id, Object.assign({}, tempMap.get(item.id) || {}, item)); }) // 转换为数组得到最终结果 const resultado = Array.from(tempMap.values());
实现方案2:使用普通对象做中间存储(兼容低版本环境)
如果需要兼容不支持Map的旧运行环境,可以用普通对象替代:
const tempObj = {}; tests.forEach(item => { tempObj[item.id] = {...(tempObj[item.id] || {}), ...item}; }) const resultado = Object.values(tempObj);
说明
如果同一个id下出现重复属性,后遍历到的属性值会覆盖先出现的,符合常规合并逻辑。
内容的提问来源于stack exchange,提问作者alangwynn
相关产品推荐
相关产品推荐

