一般的去重方式

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) === indexvar judgeTwo = arrnames.indexOf(x.name) === indexreturn judgeOne || judgeTwo
})
console.log(arr2);

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

es6 使用filter给对象数组去重相关推荐

  1. 使用ES6进行对象数组去重

    之前使用new Set数组去重,只可以去重简单字符数组,或者数字数组等.Array.from(new Set(arr))即可.但是这种方案针对对象数组并不适用. 那么简易的使用ES6进行对象数组去重呢 ...

  2. 【ES6】最简单的对象数组去重的方法

    对象数组去重的方法 // arr传数组名,attr传属性名 const uniqueArr=(arr,attr)=> {const res = new Map();return arr.filt ...

  3. 分享6个对象数组去重的方法

    大家好,关于对象数组去重的业务场景,想必大家都遇到过类似的需求吧,针对这样的需求,你是怎么做的呢. 下面我就先和大家讨论下基于对象的某个属性如何去重. 方法一:使用 .filter() 和 .find ...

  4. vue 对象数组去重

    vue 对象数组去重 1.利用set去重 其实很简单,一般的数组去重可以直接用 new Set() 方法即可,但是数组对象的话,比较复杂,不能直接用,我们可以采取间接的方法来去重 对象去重 uniqu ...

  5. 两个对象数组去重的3种方法

    两个对象数组去重的3种方法 前言 问题描述 解决方案一 解决方案二 解决方案三 前言 前段时间写过JavaScript数组去重最简单的 4 种方案,里面的数组元素是基本类型.本文要讲的数组元素是对象, ...

  6. JS对象数组去重简单有效方法

    I.输入 JS对象数组去重是业务经常遇到的方法,稍微简洁一点的方法,如下: var data = [{"id": 1, "name": "李四1&qu ...

  7. javascript ES6有趣的Set,数组去重、并集、交集、差集

    Set 对象存储的值总是唯一的 Set 对象方法 方法 描述 add 添加某个值,返回Set对象本身. clear 删除所有的键/值对,没有返回值. delete 删除某个键,返回true.如果删除失 ...

  8. JSON对象数组去重

    第一种:通过判断数组中当前元素的下标与该元素第一次出现在数组中的下标是否一致来进行数组去重 let arr = [{id: 1,name: '第一'},{id: 2,name: '第二'},{id: ...

  9. js 去重某个键值 数组对象_js数组去重(包括对象数组去重)

    2019.08.02补: 对象数组建议直接循环然后使用工具库(lodash)的深比较,评论里也有指出,文章的方法有些取巧了 生产环境不要这么玩~. 方法一:利用ES6的Array.from()/扩展运 ...

最新文章

  1. JVM 性能调优之定位问题 实战篇
  2. Rust 2018 即将到来:设法从 Rust 2015 过渡
  3. 电脑断网也难逃黑客攻破!风扇在转,手机放桌上,数据就被隔空窃取了
  4. 20165218 2017-2018-1 《Java程序设计》第四周学习总结
  5. jvm性能调优 - 16案例实战_每日上亿请求量的电商系统 年轻代垃圾回收参数如何优化
  6. 百度模糊搜索怎么实现_百度搜索广告是什么?百度搜索竞价广告投放推广效果怎么样?...
  7. 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码
  8. linux系统下的“静态库和动态库”专题之二:库的创建和使用
  9. [C语言 - 12] Union联合
  10. c# 上传图片到一个外链相册服务器
  11. 7-3 DAG图优化-A (15 分)(更新版)
  12. GPO组策略 权限处理之原则
  13. 破解“还原卡”技术方法
  14. 毫米波雷达探测应用,智能人体感应雷达,家居雷达方案新体验
  15. ubuntu-22.04.1磁盘分区和挂载
  16. 移动端h5文字长按复制_H5实现移动端复制文字功能
  17. Buffer基本使用
  18. 【无标题】USB2514i USB HUB使用经验总结
  19. 田忌赛马-贪心算法实现
  20. ubuntu安装postgresql并修改数据存储目录

热门文章

  1. 智慧环保大数据可视化系统建设
  2. 杰理之实验现象【篇】
  3. 图灵机2:等价变形+算法定义
  4. 你刚才微信上撤回了什么?我都看到了
  5. Windows7下载钉钉DingTalk直播回放视频到本地
  6. 4.4 测试度量指标体系和质量评估
  7. 光场相机模拟程序解读
  8. 肖特基二极管的作用与识别方法
  9. 软件版本发布要求和标准
  10. 人工智能领域期刊和顶会(中国计算机学会推荐国际学术期刊-2019)