首页 > 编程语言 > 详细

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

时间:2020-01-17 18:00:07      阅读:64      评论:0      收藏:0      [点我收藏+]

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

    // 需要去重的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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!