数组去重面试过的人想必都很熟悉,非常重点的一道题
咱们主要讲一些简单易记的方法以供参考
1.indexOf
我们可以用 indexOf 简化内层的循环:
var array = [1, 1,2,43,2];
function unique(array) {
var res = [];
for (var i = 0, len = array.length; i < len; i++) {
var current = array[i];
if (res.indexOf(current) === -1) {
res.push(current)
}
}
return res;
}
console.log(unique(array));
这种方法想必大家都很熟悉吧,但是这种方法很耗性能,每次都得遍历
2.排序后去重
其实我们可以先将数组进行排序,排序以后会有很多相同的值在一起,然后我们把现在的值和上一次的值进行对比,不相同的话就存进去,就可以达到相同的去重的效果
var array = [1, 1,2,43,2];
function unique(array) {
var res = [];
var sortedArray = array.concat().sort();
var seen;
for (var i = 0, len = sortedArray.length; i < len; i++) {
// 如果是第一个元素或者相邻的元素不相同
if (!i || seen !== sortedArray[i]) {
res.push(sortedArray[i])
}
seen = sortedArray[i];
}
return res;
}
console.log(unique(array));
3.filter方法
这种方法可以更快速的写出去重方法
var array = [1, 1,2,43,2];
function unique(array) {
return array.concat().sort().filter(function(item, index, array){
return !index || item !== array[index - 1]
})
}
console.log(unique(array));
4.es6的set方法
var array = [1, 2, 1, 1, '1'];
function unique(array) {
return [...new Set(array)];
}
console.log(unique(array)); // [1, 2, "1"]
是不是很简单
网友评论