风尚云网学js-关于js对象数组如何去重?


请问对象数组如何去重?

目录

请问对象数组如何去重?

1.es5数组新方法  reduce

2.利用indexOf

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


 

每个对象的内存地址本身就不一样,去重的意义何在,非要去重的话,那只能通过JSON.stringify序列化成字符串(这个方法有一定的缺陷)后进行对比,或者递归的方式进行键-值对比,但是对于大型嵌套对象来说还是比较耗时的,

都是根据每个对象的某一个具体属性来进行去重,因为考虑到服务端返回的数据中可能存在id重复的情况,需要前端进行过滤,

1.es5数组新方法  reduce

//reduce方法有两个参数,第一个参数是一个callback,用于针对数组项的操作;第二个参数则是传入的初始值,这个初始值用于单个数组项的操作。

const res = [
  { id: 1, a: 1 },
  { id: 2, a: 2 },
  { id: 3, a: 3 },
  { id: 1, a: 4 },
];
const result = res.reduce((acc, cur) => {
    const ids = acc.map(item => item.id);
    return ids.includes(cur.id) ? acc : [...acc, cur];
}, []);
console.log(result); // -> [ { id: 1, a: 1}, {id: 2, a: 2}, {id: 3, a: 3} ]

2.利用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"}]

3.直接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)

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风尚云网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值