方法1:
关键词:双for循环、splice
思 路:将数组中的值一个个的比较,重复的就删掉
复杂度:O(n^2)
function removeDup(array) {
for (var i = array.length-1; i>=1; i--){
for(var j = i-1; j>=0; j--){
if(array[j] == array[i])
array.splice(j,1);
}
}
return array;
}
a = [1,1,2,2,2,3,3,4];
removeDup(a);
// [1, 2, 3, 4]
方法2:
关键词 indexOf、push
思路:设置一个新数组,根据indexOf筛选原数组,只要新数组中没有的,就push到新数组
复杂度:O(n)
function removeDup(array) {
var newArray = [];
for(var i = 0; i < array.length;i++){
if(newArray.indexOf(array[i]) == -1 ) {
newArray.push(array[i]);
}
}
return newArray;
}
a = [1,1,2,2,2,3,3,4];
removeDup(a);
// [1, 2, 3, 4]
方法3:
关键词 es6 Set、Array.from
思 路:
- Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化,其成员的值都是唯一的,没有重复的值。
- Array.from()方法可以将类数组对象和可遍历(iterable)的对象转化为真正的数组。
function removeDup(a) {
return Array.from(new Set(a));
}
a = [1,1,2,2,2,3,3,4];
removeDup(a);
// [1, 2, 3, 4]
总结
在前端面试中,数组去重还是一个出现频率比较高的题目,算是一种基本能力吧。以上方法,在我看来,还是比较容易理解的,还有一些其他方法,正在整理中,会陆续更新。