数组去重

关于去重最先想到的思路就是双层循环,通过遍历比较。

1.  splice

var arr = [1, 2, 1, undefined, undefined, null, null, NaN, NaN, 'NaN', {}, {}];
for (var i = 0; i < arr.length; i++) {
    for (var j = i + 1; j < arr.length; j++) {
        if (arr[i] == arr[j]) {
        //如果后面和前面相同,删除后面一个
            arr.splice(j, 1);
        //因为删除过后,后面元素会移到前面一位,所以要减一。
        //自己可以测验一下,比如有连续的三个1,一试便知。
            j--;
        }
    }
}
console.log(arr); //[1, 2, undefined, NaN, NaN, 'NaN', {…}, {…}]
//NaN和{}没有去重,两个null直接消失了

2.  indexOf

var arr = [null, null, NaN, NaN, 'NaN', {}, {}];
var array = [];
for (var i = 0; i < arr.length; i++) {
    if (array.indexOf(arr[i]) === -1) {
        //如果未找到项目,Array.indexOf() 返回 -1。
        array.push(arr[i])
    }
}
console.log(array)// [null, NaN, NaN, 'NaN', {…}, {…}]

3.  sort

var arr = [null, null, NaN, NaN, 'NaN', {}, {}];
arr = arr.sort()
var array = [arr[0]];
for (var i = 1; i < arr.length; i++) {
    if (arr[i] !== arr[i - 1]) {
        array.push(arr[i]);
    }
}
console.log(array)//[NaN, NaN, 'NaN', {…}, {…}, null]
//NaN、{}没有去重

4.  filter

var arr = [null, null, NaN, NaN, 'NaN', {}, {}];
var array = arr.filter(function (item, index, arr) {
    //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
    return arr.indexOf(item, 0) === index;
});
console.log(array) //[null, 'NaN', {…}, {…}]

5.  includes

var arr = [null, null, NaN, NaN, 'NaN', {}, {}];
var array = [];
for (var i = 0; i < arr.length; i++) {
    if (!array.includes(arr[i])) { 
        array.push(arr[i]);
    }
}
console.log(array)//[null, NaN, 'NaN', {…}, {…}]

6. es6中的方法 (如不考虑兼容性此方法代码量最少,但不能去除重复的控对象)

let arr = [12,43,23,12,43,55]
let item = [... new Set(arr)]

 

posted @ 2022-07-26 16:03  三水儿  阅读(21)  评论(0编辑  收藏  举报