JS实现数组去重

1.ES6新增数据去重方法Set

    思路:Set 是ES6引入的一种新的数据结构类型,允许你存储任何类型的唯一值,无论是原始值还是对象引用

        let aa = [1, 2, "2", 4, 9, "a", "a", 2, 3, 5, 6, 5];

        //Set数组简单的去重
        console.log([...new Set(aa)]);   // [1, 2, "2", 4, 9, "a", 3, 5, 6]

        let s1 = new Set();
        s1.add('a');
        s1.add('a');
        console.log(s1);   //{"a"}

  

 

2.简单去重方法

  思路:遍历数组中的每一个数据,判断新数组中是否存在当前数据,如不存在加入

//简单去重方法
function uniq(arr) {
    let newArr = [];
    arr.forEach(a => {
        if (!isSame(newArr, a)) {
            newArr.push(a);
        }
    })
    return newArr;
}
function isSame(arr, value) {
    for (let i = 0; i < arr.length; i++) {
        const a = arr[i];
        if (a === value) {
            return true;
        } else if ((isNaN(a) && a !== undefined && !a) && isNaN(value) && value !== undefined && !value) {//判断是否是NaN
            return true;
        }
    }
    return false;
}

        uniq(aa);  //[1, 2, "2", 4, 9, "a", 3, 5, 6]

3.数组下标判断方法

  思路:判断当前数组的第i项第一次出现的位置是否是i位,若是,则不重复加入新数组

 function uniq3(array) {
            let newarr = [];
            for (let i = 0; i < array.length; i++) {
                if (array.indexOf(array[i]) == i) {
                    newarr.push(array[i]);
                }
            }
            return newarr;
        }
        console.log(uniq3(aa));   //[1, 2, "2", 4, 9, "a", 3, 5, 6]

4.相邻排序法

  思路:给数组排序,仅加入不与相邻的数组相同的数据

function uniq4(array) {
            array.sort();
            console.log(array);

            let temp = [array[0]];
            for (let i = 1; i < array.length; i++) {
                if (array[i] != temp[temp.length - 1]) {
                    temp.push(array[i]);
                }
            }
            return temp;
        }
        console.log(uniq4(aa));  //[1, 2, 3, 4, 5, 6, 9, "a"]

5.双层循环

  思路:当内层循环检测到跟外层循环一样的值的时候,跳出内层循环,抛弃外层循环当前值,继续下一次循环

 function uniq5(array) {
            let temp = [];
            for (let i = 0; i < array.length; i++) {
                for (let j = i + 1; j < array.length; j++) {
                    if (array[i] === array[j]) {
                        ++i;
                    }
                }
                temp.push(array[i]);
            }
            return temp;
        }
        console.log(uniq5(aa));  //[1, "2", 2, 3, 4, 5, 6, 9, "a"]

6.Object.keys()

  思路:Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 

        let obj = {};//key 
        arr1.forEach(item => {
            obj[item] = 1;
        });
      
        console.log(Object.keys(obj).map(o => Number(o)));//[1, 2, 3, 4, 5]

 

posted @ 2019-04-11 14:07  yinping  阅读(190)  评论(0编辑  收藏  举报