es6 使用filter给对象数组去重 您所在的位置:网站首页 数组去重前端 es6 使用filter给对象数组去重

es6 使用filter给对象数组去重

2024-01-13 02:59| 来源: 网络整理| 查看: 265

一般的去重方式 var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2]; var arr2 = arr.filter((x, index,self)=>{ // self:表示该数组对象 // x: 表示当前对象 // index: 表示当前元素下标 return self.indexOf(x)===index }) console.log(arr2); //[1, 2, 3, 4, 5, 6, 7, 8, 0, 56]

此方法判断去重机制: 在filter中定义了一个匿名函数, 在filter方法中,会遍历目标数组,对于数组中的每个元素,都会被自己定义的那个匿名函数执行一次,每一次返回一个boolean值,如果返回false,则会将该元素从数组中去除.最后filter方法会返回一个新的数组对象作为处理结果. 这种方式的局限性: 由于里面的判断相等,用的是indexOf(x)—获取当前元素出现的第一次出现的位置,再判断该位置是否与当前元素下标相等,如果不相等,说明在其他位置出现的相同的值,就返回false.这种方式只能用于简单元素的数组,不能用于判断对象.

给对象去重 var arr = [ { 'id':1, 'name':'fsdf' }, { 'id':1, 'name':'fsdf' }, { 'id':2, 'name':'fsdf' }, { 'id':2, 'name':'fsdf' }, { 'id':3, 'name':'fsdf' }, ]; var arr2 = arr.filter((x, index,self)=>{ var arrids = [] arr.forEach((item,i) => { arrids.push(item.id) }) return arrids.indexOf(x.id) === index }) console.log(arr2);

实现原理: 这个是去除有相同id的对象,首先将每个元素的id单独取出来,给放到一个新的数组中,然后再利用上面的方式进行判断去重 同样有缺陷: 只能用于判断对象数组中的对象的某个属性是否重复

进一步的优化(某对象中要判断多个字段同时重复) var arr = [ { 'id':1, 'name':'fsdfwsd', }, { 'id':1, 'name':'fsdfwsd', }, { 'id':1, 'name':'ythrg' }, { 'id':2, 'name':'trhwfre' }, { 'id':2, 'name':'lokfjks' }, { 'id':2, 'name':'trhwfre' }, { 'id':3, 'name':'trewtw' }, ]; var arr2 = arr.filter((x, index,self)=>{ var arrids = [] var arrnames = [] arr.forEach((item,i) => { arrids.push(item.id) arrnames.push(item.name) }) var judgeOne = arrids.indexOf(x.id) === index var judgeTwo = arrnames.indexOf(x.name) === index return judgeOne || judgeTwo }) console.log(arr2);

实现方式: 如果要判断多个对象中的字段,可以继续使用上面的方式,将要判断的其他字段加入同样存入数组中,最后对多个数组进行判断,最后只要有一个为false就为返回false



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有