• 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]
  • 相关阅读:
    C++数据类型与C#对应关系 c#调用WINDWOS API时,非常有用(转)
    Web应用系统中关闭Excel进程
    jquery下一个空格带来的血案
    导出Excel时发生COM组件失败的解决方案
    水晶报表的交叉表中增加超级链接
    JavaScript和ExtJS的继承 Ext.extend Ext.applyIf (转)
    SQL SERVER 2000数据库置疑处理
    PHP中对淘宝URL中ID提取
    树莓派+蓝牙适配器连接蓝牙设备
    树莓派摄像头模块转成H264编码通过RTMP实现Html输出
  • 原文地址:https://www.cnblogs.com/yinping/p/10689301.html
Copyright © 2020-2023  润新知