数组去重

对var arr=[1,2,3,1,2,3,5,6,23,4,2,5,7,9,23,6,5,3,2,21,4,65,3,3,4,6,2,5,7,7]去重
方法一:i从前到后遍历,j从后到i遍历,去掉相同的j

for(var i=0;i<arr.length;i++){
     for(var j=arr.length;j>i;j--){
         if(arr[i]===arr[j]){
             arr.splice(j,1);
         }
      }
}
        console.log(arr);

方法二:设置一个开关,在两层循环里判断如果有相同的数值就关掉开关,没有相同的打开开关push到数组中,

var newArr=[]
    for(var i=0;i<arr.length;i++){
        var bool = false
        for(var j=0;j<i;j++){
            if(arr[i]===arr[j]){
                bool=true
                break
            }
        }
        if(!bool){
            newArr.push(arr[i])
        }
    }
    arr=newArr
    newArr=null
    console.log(arr)

方法三:直接用indexOf判断新数组是否有这个元素,如果有不进入if,如果没有就push没有的元素

var newArr=[]
    for(var i=0;i<arr.length;i++){
        if(newArr.indexOf(arr[i])===-1){
            newArr.push(arr[i])
        }
    }
    arr=newArr
    newArr=null
    console.log(arr)

方法4:利用对象的[“属性名”],来排除已有的元素,这样未有的元素就可以添加进新数组,
同样可以去重,必须得给obj[arr[i]]一个值,否则每次进入if语句obj[arr[i]]的值都是underfined

var newArr=[]
    var obj={}
    for(var i=0;i<arr.length;i++) {
        if (!obj[arr[i]]) {
            obj[arr[i]]=1
            newArr.push(arr[i])
        }
    }
    console.log(newArr,obj)

方法五:利用ES6 中set中元素无法重复这一属性去重

let arr=[1,2,4,6,2,4,6,1,2,4,5,7,6];
arr=Array.from(new Set(arr));

利用对象对数组去重并统计重复的个数

var newArr=[]
    var obj={}
    for(var i=0;i<arr.length;i++) {
        if (!obj[arr[i]]) {
            obj[arr[i]]=1
        }else{
            obj[arr[i]]++
        }
    }
    console.log(newArr,obj)

数组对象去重并统计重复的个数

var data=[
    {id:1001,icon:"img/1.png",name:"餐饮0",num:1,price:10,a:1},
    {id:1002,icon:"img/2.png",name:"餐饮1",num:1,price:20,a:2},
    {id:1002,icon:"img/2.png",name:"餐饮1",num:1,price:20,a:3},
    {id:1003,icon:"img/3.png",name:"餐饮2",num:1,price:30,a:4},
    {id:1003,icon:"img/3.png",name:"餐饮2",num:1,price:30,a:5},
    {id:1004,icon:"img/4.png",name:"餐饮3",num:1,price:40,a:6},
    {id:1005,icon:"img/5.png",name:"餐饮4",num:1,price:50,a:7},
    {id:1005,icon:"img/5.png",name:"餐饮4",num:1,price:50,a:8},
    {id:1006,icon:"img/6.png",name:"餐饮5",num:1,price:60,a:9},
    {id:1006,icon:"img/6.png",name:"餐饮5",num:1,price:60,a:10},
    {id:1006,icon:"img/6.png",name:"餐饮5",num:1,price:60,a:11},
    {id:1007,icon:"img/7.png",name:"餐饮6",num:1,price:70,a:12},
    {id:1008,icon:"img/8.png",name:"餐饮7",num:1,price:80,a:13},
    {id:1008,icon:"img/8.png",name:"餐饮7",num:1,price:80,a:14},
    {id:1008,icon:"img/8.png",name:"餐饮7",num:1,price:80,a:15},
    {id:1009,icon:"img/9.png",name:"餐饮8",num:1,price:90,a:16},
    {id:1010,icon:"img/10.png",name:"餐饮9",num:1,price:100,a:17}
];

function filterArrObj(Arr){
    var num=1;
    var newArr=Arr.filter(function (t,index) {
        var bool=false;
        for(var i=index+1;i<Arr.length;i++){
            if(Arr[i].id===t.id){
                bool=true;
                num++;
                break;
            }
        }
        t.num=num;
        if(!bool){
            num=1;
            return t;
        }
    });
    return newArr
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值