数组去重是一道经典的手写面试题,在真实的项目中碰到的数组去重,一般都是后台去处理,很少让前端处理数组去重。虽然日常项目用到的概率比较低,但还是需要了解一下,以防面试的时候可能会被问到。这篇内容接下来会写出js中数组去重的几种方法:
双重循环遍历数组
定义一个新数组,并存放原数组的第一个元素,然后将元素组一一和新数组的元素对比,若不同则存放在新数组中。
function unique(arr) {
var newArr = [];
for (let i = 1; i < arr.length; i++) {
for (let j = 0; j < newArr.length; j++) {
if (arr[i] === newArr[j]) {
break;
}
}
if (newArr.length == j) {
newArr.push(arr[i]);
}
}
return newArr;
}
这种方法便于新手理解
利用splice直接在原数组进行操作
双层循环,外层循环元素,内层循环时比较值
值相同时,则删去这个值
注意点:删除元素之后,需要将数组的长度也减1.
function unique(arr){
for(i = 0; i < arr.length; i++){
for(j = i + 1; j < arr.length; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
arr.length--;
j--;
}
}
}
return arr;
}
利用对象的属性不能相同的特点进行去重
function unique(arr){
var obj = {},
result = [];
for(i = 0; i< arr.length; i++){
if(!obj[arr[i]]){ //如果能查找到,证明数组元素重复了
obj[arr[i]] = 1;
result.push(arr[i]);
}
}
return result;
}
利用数组的indexOf下标属性来查询。
function unique(arr) {
var newArr = []
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i])===-1) {
newArr.push(arr[i])
}
}
return newArr
}
利用数组原型对象上的includes方法。
function unique(arr) {
var newArr = []
for (var i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i])
}
}
return newArr
}