数组去重
May 13, 2018 15:48 · 424 words · 1 minute read
前言
谈起数组去重,对于大家来说再熟悉不过了,今天想罗列下常用数据的去重方法,谈谈自己的拙见。
方法一
首先介绍下大家最熟悉不过的一个,使用 indexOf
function unique(arr) {
if(!Array.isArray(arr)) {
return
}
var res = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (res.indexOf(arr[i]) === -1) {
res.push(arr[i])
}
}
return res
}
该方法比较简单,通俗易懂。
方法二
使用双层循环实现,由于时间复杂度为O(n^2) 当数组比较长时,比较耗费内存
function unique(arr) {
if (!Array.isArray(arr)) {
return
}
var res = [];
for (var i = 0, len = arr.length; i < len; i++) {
for (var j = 0; resLen = res.length, j < resLen; j++) {
if (arr[i] === res[j]) {
break;
}
}
if (j === resLen) {
res.push(arr[i]);
}
}
return res;
}
方法三
同样是使用indexOf结合数组的filter方法通过检测元素第一次在数组中出现位置和现在的位置是否相等,若不相等则说明是重复元素。
function unique(arr) {
if (!Array.isArray(arr)) {
return
}
var res = arr.filter(function(item, index, arr) {
return arr.indexOf(item) === index;
})
return res;
}
方法四
ES6中新增了Set 和Map的数据结构
function unique(arr) {
if (!Array.isArray(arr)) {
return
}
return Array.from(new Set(arr));
}
可简写为:
function unique(arr){
return [...new Set(arr)];
}
总结
从代码的不断减少,我们可以发现javascript这门语言也在不断改善,越来越高效。我们应该选择最适合我们的场景去使用。(后续新的方法不断更新)
- 跨域常用解决方案
- 通俗易懂的Promise
- 利用Hugo搭建个人博客
- 你好,2018