zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    Android Studio 开发
    Jsp编写的页面如何适应手机浏览器页面
    电影
    Oracle 拆分列为多行 Splitting string into multiple rows in Oracle
    sql server 2008 自动备份
    WINGIDE 激活失败
    python安装 错误 “User installations are disabled via policy on the machine”
    ble编程-外设发送数据到中心
    iOS开发-NSString去掉所有换行及空格
    ios9 字符串与UTF-8 互相转换
  • 原文地址:https://www.cnblogs.com/yinping/p/10689301.html
Copyright © 2011-2022 走看看