Dutt
侠客
侠客
  • 最后登录2023-09-04
  • 发帖数11
阅读:4214回复:1

[es 6]数组去重的几种方法

楼主#
更多 发布于:2023-01-16 17:50
因为真实项目中,去重可能不仅仅是对一些数字的去重,可能还包含一些字符串,数字混合的场景,所以我们这里随意想一个混合数组,例如:
let arr = ['2022-03-21', "我", 3, 8, 5, 3, 4, "我", 3, '2022-03-21', '2022-03-22', 8];


1. 第一种方法(嵌套双成循环)
第1种是定义一个新的空数组,再执行嵌套双循环,监测空数组中如果没有的元素,push进空数组中,我们push一个元素,跳过第一次循环(continue),第二次再进行循环对比
let newArr = [];
       for (let i = 0; i < arr.length; i++) {
           if (newArr.length === 0) {
               newArr.push(arr[i]);
               continue;
           }
           for (let j = 0; j < newArr.length; j++) {
               if (newArr.indexOf(arr[i]) === -1) {
                   newArr.push(arr[i]);
               }
           }
       }
2. 第二种方法(indexOf)
   第2种是第一种的改进,也是新定义一个空数组,利用indexOf监测新数组中是否包含某个元素.
let newArr = [];
       for (let i = 0; i < arr.length; i++) {
           if (newArr.indexOf(arr[i]) === -1) {
               newArr.push(arr[i]);
           }
       }
3. 第三种方法(set)

第3种就是es6之后出的set了,set本身的设定就是非重复的类数组,所以才有了数组与set互相转换的知识点,而set转为数组可以是 [...set]这种解构形式,也可以是Array.from(set)的方法
 
let mySet = new Set(arr); // 非重复的类数组
      let newArr = Array.from(mySet); // set转数组
      // let newArr = [...mySet]; // 或者是这种解构方法
      document.write(newArr);

4.  第四种方法(includes)
第4种是利用数组内置的includes方法,监测数组中是否包含某个元素;
let newArr = [];
        for (let i = 0; i < arr.length; i++) {//遍历数组
            if (!newArr.includes(arr[i])) {
                newArr.push(arr[i]);
            }
        }</i></i>

5.  第五种方法(filter)

利用filter的内置方法,filter接收一个内置函数,而函数自身又接收3个参数,item相当于arr,index相当于i索引,arr就是数组本身,某些情况需要传入arr,但本案例因为比较简单,就不传入了。利用indexOf首次查找索引的方式,返回原数组中元素首次出现的所有元素,达到去重效果

let newArr = arr.filter((item, index) => {
            return arr.indexOf(item) === index;
        })

最新喜欢:

doubleyongdouble...
doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
沙发#
发布于:2023-01-18 10:38
不错,总结到位哦
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号