请问对象数组如何去重?

目录

请问对象数组如何去重?

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)

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

  1. android两个数组对象去重合并,JS 两个对象数组合并并去重

    JS两个对象数组合并并去重 let jsonArr = [ { "ID": "", "NO": "1", "N ...

  2. 风尚云网学习-H5+css3+js上传文件页面提交不跳转

    风尚云网学习-HTML+原生js上传文件页面提交不跳转页面效果图: 众所周知,from表单提交后会自动跳转url, 此时我们可以用一个空的frame 接收,阻止跳转 废话不多说,上全部代码: < ...

  3. json数组 js html标签,js定义json对象数组 json 数组也是数组 //

    var jsonstr="[{'name':'a','value':1},{'name':'b','value':2}]"; var jsonarray = eval('('+js ...

  4. Silverlight调用的JS方法返回对象数组的处理方法

    最近在做Silverlight应用,需要用Silverlight调用页面中Javascript方法.这个JS方法返回一个对象数组给Silverlight.对于这个对象数组怎么在Silverlight里 ...

  5. js ajax传对象数组参数,JS传递对象数组为参数给后端,后端获取

    JS传递对象数组为参数给后端,后端获取. 前端JS代码: var conditons = []; var test1 = new Object(); test1.name="1"; ...

  6. js解析java对象数组_js接收并转化Java中的数组对象的方法

    在做项目时,要向ocx控件下发命令,就要在js中得到java中的对象,然后拼成一种格式,下发下去...当对象是一个时比较简单,但如果对象是一个数组时,就略显麻烦了. 开始我以为有简单的方式,可以直接进 ...

  7. vue,js中json对象数组按对象属性排序(sort方法)根据英文首字母进行排序

    for (let i = 0; i < this.tableData.length; i++) {const itemList = this.tableData[i] as any;const ...

  8. 风尚云网面试题系列—JS高频手写代码题

    目录 实现 Promise 实现一个 call 函数 实现一个 apply 函数 实现一个 bind 函数 浅拷贝.深拷贝的实现 实现一个防抖函数 实现一个节流函数 柯里化函数的实现 Object.c ...

  9. js对某个对象数组按照某个字段来排序

    原数组: let arr1 = [ {count:1,name:'小米'}, {count:3,name:'华为'}, {count:2,name:'苹果'} ] function sortBy (f ...

最新文章

  1. docker安装nginx实例
  2. 企业桌面安全管理解决方案
  3. mysql中join on_Mysql inner join on的用法实例(必看)
  4. 核心技能点-二分查找
  5. top命令的使用查看进程占用
  6. Unity3D世界坐标和局部坐标的关系,之间转换浅谈
  7. python:talib 计算 SAR 用 pro_api
  8. Halcon错误 #2021: System clock has been set back.
  9. 洛谷P2466 [SDOI2008] Sue 的小球 题解
  10. 提示磁盘被写保护怎么办?
  11. Atitit 工程师程序员技术级别对应表与主要特征 P1--p6 说明 类别 职称 对应技术标志 P5 高级工程师 工程师类 一般四五年 P6 资深开发 工程师类 78年经历 P7 P7
  12. 很「佛系」的商用本 — ThinkPad S2 2020 长测
  13. 零基础学习PS——Photoshop的167个技能
  14. ITIL4 术语词汇表(附下载)
  15. 获取微信小程序的APPID及任意一个页面的路径信息
  16. web前端人员培训要学些什么?
  17. 使用kd树数据结构,实现k-means聚类加速
  18. Nature重磅!在机器人骨架上首次生成人类肌腱细胞
  19. ICPC——2021台湾站(A B C D E J)
  20. 博特电子-17届智能车无线充电组恒功率方案

热门文章

  1. opencv - 简介
  2. 主流消息中间件技术简介
  3. 每个人来到世上,都是匆匆过客
  4. I/O设备——操作系统(考研操作系统)
  5. 斐波那契堆(Fibonacci heaps)
  6. Verilog代码BCD计数器
  7. 心里元宇宙火热招幕中
  8. 用c#每日更换“必应背景图片”为“桌面壁纸”
  9. IT人形象(装笔)管理指南
  10. 微信小程序最常见6款的UI框架