关于javascript:使用js-reduce合并两个对象数组有则替换无则新增

31次阅读

共计 729 个字符,预计需要花费 2 分钟才能阅读完成。

需要

有两个对象数组 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 的官网文档

正文完
 0