数组去重,怎么玩?

原创 黄灿灿 随笔 笔记 193阅读 18 天前 举报

一般操作

最简单的方式,优点兼容性好,缺点是需要两次 for 循环,性能较差

数组的 indexOf 属性

ES5的规范,兼容是IE8以上版本

数组的 filter 属性

filter() 方法会创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。filter 的回调有三个参数,其中第三个参数是当前元素属于的数组对象,这样我们可以利用 indexOf 属性。filter 兼容到 IE9

利用 Object 的 key value

这种方案的事件复杂度为 O(n), 但是对象的键,默认是字符串类型,这意味着什么呢,数字 1 和 字符串 '1',在键中是相等的,所以,上面这种方法不适合字符串和数字混合的去重。

所以我们将元素的类型也放入对象的键中

数组的 sort 方法

sort 方法的优点在于利用了排序,返回后一个和前一个不相等的元素。缺点在于改变了元素的本来的排序位置。

ES6 Set

ES6 提供了新的数据结构 Set,它类似于数组,但是成员的值都是唯一的,没有重复的值。向 Set 加入值的时候,不会发生类型转变,所以 5 和 '5' 是两个不同的值。Set内部判断两个值是否相同,用的是类似于 "==="的算法,但是区别是,在set内部认为NaN 等于 NaN ;
Set 可以转换为数组,所以很容易实现去重

ES6 Map

ES6 新增了 Map 数据结果,通过 has 和 set 方法就能很方便的对前面的 object key value 方案进行优化。

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复