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))

  • 相关阅读:
    一些前台技巧
    javascript中的面向对象
    vs.net 常用快捷键
    js和C#中的进制转换方法
    MFC中CDC相关图形,文本的一些使用方法(转)
    poj1505
    poj1401
    poj2533
    poj1504
    poj1384
  • 原文地址:https://www.cnblogs.com/aloehui/p/9256222.html
Copyright © 2011-2022 走看看