js 使用reduce方法合并两个对象数组,有则替换,无则新增

摘要:有两个对象数组A和B,现在需要将两个数组中的对象合并,有则替换,无则新增,数组如下所示;我们分析下A和B数组,A和B中都存在name=李四的对象

需求

有两个对象数组A和B,现在需要将两个数组中的对象合并,有则替换,无则新增,数组如下所示:

let A = [
    {name: '张三', age: 18, sex:'男'},
    {name: '李四', age: 26, sex:'男'},
    {name: '王五', age: 32, sex:'男'}
]

let B = [
    {name: '李四', age: 25, sex:'男', height: 170},
    {name: '刘六', age: 32, sex:'女'}
]

合并后:C = [{
    {name: '张三', age: 18, sex:'男'},
    {name: '李四', age: 25, sex:'男', height: 170},
    {name: '王五', age: 32, sex:'男'},
    {name: '刘六', age: 32, sex:'女'}
}]


操作

我们分析下A和B数组,A和B中都存在name=李四的对象,所以要替换,而B中的name=刘六A中不存在,所以要新增,话不多说,我们通过js的reduce方法来做,代码如下:

const C = B.reduce((arr1, arr2)=>{
        // arr1第一次进来是等于初始化化值:A
        // arr2依次是B中的对象,挨个判断
        let isFlag = false
        arr1.forEach(item => {
          if(item.name === arr2.name){
            isFlag = true
            // 如果找到则替换
            item = Object.assign(item, arr2)
          }
        })
        if(!isFlag){
          // 如果找不到则新增
          arr1.push(arr2)
        }
        // 返回结果值arr1,作为reduce下一次的数据
        return arr1
      }, A)

这样就能成功的合并A和B数组了,如果大家对reduce这个方法不太了解,可以查看mdn的官方文档


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_12014