数组或数组对象去重(添加的情况)

数组去重

for循环去重
判断一个数组里面是否有重复的

function distinct(arr) {
    for (let i=0, len=arr.length; i<len; i++) {
        for (let j=i+1; j<len; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1);
                // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
                len--;
                j--;
            }
        }
    }
    return arr;
}

Array.filter() 加 indexOf

function distinct(a, b) {
    let arr = a.concat(b);
    return arr.filter((item, index)=> {
        return arr.indexOf(item) === index
    })
}

ES6 中的 Set 去重

let unique = (a) => [...new Set(a)]

或参考数组去重的多种方法

数组对象合并去重

例子

//前端处理数据的时候,常见的数组对象,合并并且去重,两个数据如下:let json1=[
    {id:1,name:"aaa"},
    {id:2,name:"bbb"},
    {id:3,name:"ccc"},
] 
let json2=[
    {id:1,name:"aaa"},
    {id:2,name:"bbb"},
    {id:4,name:"ddd"},
]

方法一 for循环

for (var obj in json1){//临时选择数据
     var includeThis = false;
    for(var dbj in json2){ //右侧table里的数据
        if(json1[obj].id==json2[dbj].id){
            includeThis=true;
        }
    }
    if(includeThis==false){
        json.push(storageArea[obj]);//把当前临时数据的这一条放到右侧table的数据里
    }
}
也可以先合并在去重
let json = json1.concat(json2); //两个数组对象合并
let newJson = []; //盛放去重后数据的新数组
for(item1 of json){ //循环json数组对象的内
  let flag = true; //建立标记,判断数据是否重复,true为不重复
  for(item2 of newJson){ //循环新数组的内容
    if(item1.id==item2.id){ //让json数组对象的内容与新数组的内容作比较,相同的话,改变标记为false
      flag = false;
    }
  }
  if(flag){ //判断是否重复
    newJson.push(item1); //不重复的放入新数组。 新数组的内容会继续进行上边的循环。
  }
}
console.log("newJson",newJson);

方法二 javascript 数组的高阶函数reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

单个数组对象去重
let b = [{ id: '4', result: '第三' }, { id: '2', result: '第四' }, 
{ id: '2', result: '第二' }]
let d = []
let hash = {}
d = b.reduce((item, next) => {
hash[next.id] ? '' : hash[next.id] = true && item.push(next)
return item
}, [])
console.log(d, '看看看')

//多个数组对象去重  
let newDatas = [...this.json1, ...this.json2];
let d = []
let hash = {}
d = newDatas.reduce((item, next) => {
   hash[next.id] ? '' : hash[next.id] = true && item.push(next)
   return item
}, [])
console.log(d);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值