zoukankan      html  css  js  c++  java
  • 两种简洁的数组对象去重姿势

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

        // 需要去重的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循环的第一个值为传入的数组或者传入的值

  • 相关阅读:
    hdu 1086 You can Solve a Geometry Problem too 求n条直线交点的个数
    2019 上半年 南昌网络赛
    第十章 存储过程和函数
    第九章 Mysql函数
    第八章 Mysql运算符
    第七章 插入、更新与删除数据
    第六章 查询数据
    第五章 触发器
    第四章 视图
    第三章 索引
  • 原文地址:https://www.cnblogs.com/zhonglinke/p/12206444.html
Copyright © 2011-2022 走看看