zoukankan      html  css  js  c++  java
  • 如何给一个数组对象去重

    1.利用indexOf

    var arr = []
    var data = [
        {id:1,time:'1'},
        {id:2,time:'2'},
        {id:2,time:'3'},
    ]
    for(let val of data){
        arr.push(val.id)
    }
    var newArr = [];
    var newArr2 = [];
    for(var i =0;i<arr.length-1;i++){
        if(newArr.indexOf(arr[i]) == -1){
            newArr.push(arr[i]);
            newArr2.push(data[i]);
        }
    }
    data= newArr2;
    //[{id: 1, time: "1"}, {id: 2, time: "2"}]

    2.直接for循环,利用对象属性的唯一性

     var arr = [
         {id:'1',data:'1'},
         {id:'2',data:'2'},
         {id:'1',data:'1'},
     ]
     
    
     var result = {}
     for(var i=0;i<arr.length;i++){
         result[arr[i]['id']] = arr[i]
     }
    console.log('11',result)

    3.es5数组新方法  reduce

    var arr = [
    {id:'1',data:'1'},
    {id:'2',data:'2'},
    {id:'1',data:'1'},
    ]

    function norepeat(objArray){
    var hash = {};
    //reduce方法有两个参数,第一个参数是一个callback,用于针对数组项的操作;第二个参数则是传入的初始值,这个初始值用于单个数组项的操作。
    objArray = objArray.reduce(function(item, next) {//这是针对数组项操作的函数,对于每个数组项,reduce方法都会将其调用一次
    //可使用最多四个参数来声明回调函数(第一个参数:通过上一次调用回调函数获得的值;第二个参数:当前数组元素的值;第三个参数:当前数组元素的数字索引;第四个参数:包含该元素的数组对象)
    //这里只使用了两个参数,所以item和next分别代表上一次调用回调函数后的值和objArray项值
    hash[next.id]?'':hash[next.id]=true&&item.push(next);//与func3逻辑相似
    return item;
    }, []);//初始值是一个空对象,使用reduce方法返回的是空对象通过叠加执行之后的结果
    return objArray;
    }
    console.log('11',norepeat(arr))

  • 相关阅读:
    [day002]剑指 Offer 09. 用两个栈实现队列
    [day003]718. 最长重复子数组
    [linux]关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案
    96. 不同的二叉搜索树
    91. 解码方法
    [动态规划]64. 最小路径和
    62.不同路径
    【Java】list根据某一条件进行分组
    【Java】批量生成小程序参数码并打包下载
    【Docker】使用docker制作libreoffice镜像并解决中文乱码问题
  • 原文地址:https://www.cnblogs.com/aloehui/p/9256222.html
Copyright © 2011-2022 走看看