数组去重的三种方法
前两天面试的时候,面试官出的考题。现在我来总结一下,算是慢慢积累吧
1.两个循环,挨个对比
function uniqueArr(arr) {
var ret = [],
length = arr.length;
for(var i = 0;i < length; i++){
for(j = i+1; j<length;j++){
if(arr[i] === arr[j]){
j = ++i;
}
}
ret.push(arr[i]);
}
return ret;
}
这种方式应该是可以最容易考虑到的,但是数组过长的话,效率应该会变差。
2.先排序然后用一次循环
function uniqueArr(arr) {
var sortedArr = arr.sort();
var results = [];
for (var i = 0; i < arr.length; i++) {
if (sortedArr[i + 1] != sortedArr[i]) {
results.push(sortedArr[i]);
}
}
return results;
}
排序后用数组后一位比较前一位,一次循环就好了,但是破坏了原有数组的顺序。
3.利用对象字面量的key与value关联性,写起来比较简单
function uniqueArr(arr) {
var ret = [],
json = {},
length = arr.length;
for(var i = 0; i < length; i++){
var val = arr[i];
if(!json[val]){
json[val] = 1;
ret.push(val);
}
}
return ret;
}
也许这种方法想的时候难想到,但是用起来真的很简单~
原文地址:<a href="http://blog.jimliu.xyz/2016/11/21/Template-literals/">Jimliu写字的地方</a>欢迎来踩