测试用例
var arr = [1,1,"1","1",0,0,"0","0",undefined,undefined,null,null,NaN,NaN,{},{},[],[],/a/,/a/]indexOf
function unique(arr){ var temp = [] for(var i=0;i[ 1, "1", 0, "0", undefined, null, {}, {}, [], [], /a/, /a/ ]
NaN丢失
function unique(arr){ var temp = [] arr.forEach(function(item){ if(temp.indexOf(item) === -1){ temp.push(item) } }) return temp } console.log(unique(arr)) > [ 1, "1", 0, "0", undefined, null, NaN, NaN, {}, {}, [], [], /a/, /a/ ]
NaN重复
indexOf认为NaN与NaN是不重复的
includesfunction unique(arr){ var temp = [] for(var i=0;i[1, "1", 0, "0", undefined, null, NaN, {}, {}, [], [], /a/, /a/]
includes认为NaN和NaN是重复的
===function unique(arr){ var temp = [] var isRepeat = false for(var i=0;i[1, "1", 0, "0", undefined, null, NaN, NaN, {}, {}, [], [], /a/,/a/]
NaN重复
使用对象实现数组去重及改进function unique(arr){ var obj = {} var temp = [] for(var i=0;i[ 1, 0, undefined, null, NaN, {}, [], /a/ ]
无法区分隐式类型转换成字符串后一样的值,比如1和"1"
无法处理复杂数据类型,比如对象(因为对象作为key会变成[object Object])
改进1function unique(arr){ var obj = {} var temp = [] var key for(var i=0;i改进2[ 1, "1", 0, "0", undefined, null, NaN, {}, [], /a/ ]
function unique(arr){ var obj = {} var temp = [] var key for(var i=0;imap[ 1, "1", 0, "0", undefined, null, NaN, {}, [] ]
function unique(arr){ var temp = [] var map = new Map() for(var i=0; iset[ 1, "1", 0, "0", undefined, null, NaN, {}, {}, [], [], /a/, /a/ ]
function unique(arr){ var set = new Set(arr) return Array.from(set) } console.log(unique(arr)) > [ 1, "1", 0, "0", undefined, null, NaN, {}, {}, [], [], /a/, /a/ ]各种方法比较 总结
数组去重需要根据场景选择合适的去重方法,没有固定的答案。
参考资料谈JavaScript数组去重
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/83426.html
摘要:引子数组去重是一个老生常谈的话题,在面试中也经常会被问道。其中如果数组是排序的,去重运算效率更高,因为排序能够将相同的数排列在一起,方便前后比较。当数组有序对于对象的去重,我们知道为,所以使用比较对象在实际场景中没有意义。 引子 数组去重是一个老生常谈的话题,在面试中也经常会被问道。对于去重,有两种主流思想: 先排序,线性遍历后去重,时间复杂度O(n*log2n); 使用哈希,空间换...
摘要:专题系列第三篇,讲解各种数组去重方法,并且跟着写一个前言数组去重方法老生常谈,既然是常谈,我也来谈谈。它类似于数组,但是成员的值都是唯一的,没有重复的值。 JavaScript 专题系列第三篇,讲解各种数组去重方法,并且跟着 underscore 写一个 unique API 前言 数组去重方法老生常谈,既然是常谈,我也来谈谈。 双层循环 也许我们首先想到的是使用 indexOf 来循...
摘要:数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些你能答出其中的种,面试官很有可能对你刮目相看。数组去重的方法一利用去重中最常用不考虑兼容性,这种去重的方法代码最少。 数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你能答出其中的10种,面试官很有可能对你刮目相看...
阅读 1225·2021-11-11 16:54
阅读 1738·2021-10-13 09:40
阅读 932·2021-10-08 10:05
阅读 3498·2021-09-22 15:50
阅读 3701·2021-09-22 15:41
阅读 1782·2021-09-22 15:08
阅读 2338·2021-09-07 10:24
阅读 3570·2019-08-30 12:52