zoukankan      html  css  js  c++  java
  • js 数组去重

    1、前言

    去重方法千千万万,你要哪一种

    2、es系列方法

    2.1、es6 Set()方法

    介绍:ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
    Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化

    new Set(test);//test为去重的数组

    2.2、es7 includes

    Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。该方法属于 ES7 ,但 Babel 转码器已经支持

    unique4 (arr) {
        let newArr = [arr[0]];
        for(index of arr){
            if(!newArr.includes(index)){
                newArr.push(index);
            }
        }
        return newArr;
    }

    3、常规去重

     思路:

    • 构建一个新的数组存放结果,设置状态值
    • 从原数组中循环取出一个元素,与结果数组对比
    • 若结果数组中没有该元素,则改变状态值
    •  通过判断状态值进行结果数组的存储

    核心代码:

    unique1 (arr) {
        let newArr = [arr[0]];//现将第一个数加入到新数组中;
        arr.shift();
        let result = true;//判断是否重复,默认不存在重复true
        for(index of arr) {
            for(res of newArr) {
                if(res === index){
                    result = false;//存在重复改变状态值
                    break;
                }
            }
            if(result){
                newArr.push(index);//不存在重复则加入新数组
            }
            result = true;//循环解析重新改变状态值
        }
        return newArr;
    },

    3、排序去重

    思路:

    • 对数组进行排序(由于打乱了数组结构,不适用于需要保留原数组顺序的)
    • 判断第 i 个数组元素是否和 i-1 个数组元素相同,
    •  如果不相同,则表示新数组中不存在该元素,可以加入

    核心代码:

    unique2 (arr) {
        arr.sort();//对数组进行排序
        let newArr = [arr[0]];//现将第一个数加入到新数组中;这里移除
        let len = arr.length;
        //跳过数组第一个元素,从第二个开始
        for(let i = 1; i < len; i++) {
            //如果前后不相同,则不存在重复
            if(arr[i] !== arr[i-1]) {
                newArr.push(arr[i]);
            }    
        }
        return newArr;
    },

    5、对象去重

    思路:

    • 创建一个新数组存储结果,空对象将这个值作为属性并赋值,进行存储
    •  循环取出数组元素去对象中访问对应属性,
    •  如果存在则重复,不能加入数组

    核心代码:

    unique3 (arr) {
        let newArr = [];
        let newObj = {};//定义一个对象,通过对象来获取值
        for(index of arr) {
            //如果这个属性不存在,则可以加入数组,并复制
            if(!newObj[index]) {
                 newArr.push(index);
                 newObj[index] = 1;
            }
        }
        return newArr;
    }

    6、结语

    去重的方式还有很多,等待你去探索。。。

  • 相关阅读:
    穷举 百鸡百钱
    for嵌套for ★
    纸张的厚度循环
    MySQL架构由小变大的演变过程
    MySQL数据库主从复制实践
    想要写出高性能sql语句,你得记住这些……
    Mongodb常用的性能监控命令
    Mongodb的mongostat命令
    Windows下MongoDB常用命令
    Windows下Mysql常用操作命令
  • 原文地址:https://www.cnblogs.com/ImCehnyx/p/7450825.html
Copyright © 2011-2022 走看看