两种简洁的数组对象去重姿势

偶然间需要写数组对象去重的处理,这两种都是几行代码搞定

    // 需要去重的data数据
    let person = [
        { id: 0, name: "小明" },
        { id: 0, name: "小明" },
        { id: 0, name: "小明" },
        { id: 0, name: "小明" },
        { id: 1, name: "小张" },
        { id: 2, name: "小李" },
        { id: 3, name: "小孙" },
        { id: 3, name: "小孙" },
        { id: 1, name: "小周" },
        { id: 2, name: "小陈" },
    ];

第一种 可统计重复出现次数

    let arr = [];
    let obj = {};

    person.map(item => {
        obj[item.id] ? obj[item.id]++ : obj[item.id] = 1 && arr.push(item);
    })

第二种 不需要统计次数的

    let obj1 = {};
    let data = person.reduce((first, item) => {
        obj1[item.id] ? "" : obj1[item.id] = true && first.push(item);
        return first;
    }, [])

补充一下 Array.reduce 方法的说明

Array.reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值
Array.reduce() 可以作为一个高阶函数,用于函数的 compose

语法 array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

参数解析
total => 循环数组第一次出现 == arr[0] 循环第二个值开始为 undefined
currentValue => 数组循环第二次开始 == arr[0+1] 循环第一次的值为空从数组第二个开始直至结束
currentIndex => 循环下标索引值

initialValue => 如果传一个数组的话 total循环的第一个值为传入的数组或者传入的值

原文地址:https://www.cnblogs.com/zhonglinke/p/12206444.html