• 一道题目学ES6 API,合并对象id相同的两个数组对象


    var arr2=[{id:1,name:'23'}]
    var arr1=[{id:1,car:'car2'}]
    const combined = arr2.reduce((acc, cur) => {
        const target = acc.find(e => e.id === cur.id);
        console.log(target)
        if (target) {
            Object.assign(target, cur);
        } else {
            acc.push(cur);
        }
        return acc;
    }, arr1);
    console.log(combined);

    arr2.reduce(function(acc,cur),arr1):reduce方法传入的函数的第一个参数acc是数组元素的累计值,reduce方法的第二参数arr1是指定累计值acc的初始值。

    所以一开始acc的值就是arr1,cur的值是arr2[0].

    const target = acc.find(e => e.id === cur.id); target返回的是在arr1中id与arr2[0].id值相同的对象:即{id:1,name:'23'}

    例如var target = [{id:1},{id:2}].find(e=> e.id==1)//target的值为{id:1}

    Object.assign(target, cur)//将cur中的值复制到target中,若是相同属性就覆盖,若是不同属性就添加 

    例如:Object.assign({id:1,name:'23'},{id:1,car:'car1'})//结果是得到对象{id: 1, name: "23", car: "car1"}

    上面if...else...语句的意思就是,在arr1数组中找到了与arr2数组元素相同的id的就合并,没有找到就讲arr2数组的该元素push到arr1数组中,最后得到的acc及arr1与arr2合并后的数组。

  • 相关阅读:
    Python接口自动化核心模块 数据库操作和日志
    基于数据驱动的接口自动化框架封装
    还在担心漏测吗?快来使用jacoco统计下代码覆盖率
    Mybatisplus 分页查询,总数是如何统计的
    C++ 运算符重载
    C++ 关键字 const
    C++ 拷贝构造
    C++ 之模板
    C++ 引用
    C++ 多态
  • 原文地址:https://www.cnblogs.com/magicg/p/13677703.html
Copyright © 2020-2023  润新知