数组去重常见方法

本文详细介绍了JavaScript中五种常见的数组去重方法:两次循环遍历、filter与indexOf、新数组与indexOf、Set构造函数,以及双for循环。通过实例演示了如何高效地实现数组去重并保持代码的可读性。
摘要由CSDN通过智能技术生成

第一种两次循环遍历

    let arr = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 6, 6, 6, 6, 7, 7, 7, 8, 9, 9, 9, 9, 9, 9, ]
    arr.forEach((item, i) => {
      arr.forEach(e => {
        if (item === e) {
          arr.splice(i, 1)
        }
      })
    }) // [1, 2, 3, 4, 5, 6, 7, 8, 9]

第二种 使用 filter过滤器和indexOf方法

    let arr = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 6, 6, 6, 6, 7, 7, 7, 8, 9, 9, 9, 9, 9, 9, ]
    let newArr = arr.filter((item, index) => {
      // indexof会返回 该项第一次出现的索引值,利用filter过滤器方法,满足第一次出现的索引值和当前索引值全等条件就会返回该项 
      return arr.indexOf(item) === index
    }) // [1, 2, 3, 4, 5, 6, 7, 8, 9]

第三种 利用新数组和indexOf进行去重

    let arr = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 6, 6, 6, 6, 7, 7, 7, 8, 9, 9, 9, 9, 9, 9, ]
    let newArr = []
    arr.forEach((item, i) => {
      // 如果新数组用indexOf查找没有arr数组这项,那么就将这一项用push方法添加到新数组中
      if (newArr.indexOf(arr[i]) === -1) {
        newArr.push(arr[i])
      }
    }) // [1, 2, 3, 4, 5, 6, 7, 8, 9]

第四种 使用ES6 新方法 set 构造函数来进行去重(ES6提供了新的数据结构Set, 它类似数组,但是成员的值都是唯一的,没有重复的值,Set本身是一个构造函数,用来生成Set数据结构。)

    let arr = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 6, 6, 6, 6, 7, 7, 7, 8, 9, 9, 9, 9, 9, 9, ]
    let newArr = [...new Set(arr)] //[1, 2, 3, 4, 5, 6, 7, 8, 9]

第五种 就是最经典的双for循环遍历去重

    let arr = [1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 6, 6, 6, 6, 7, 7, 7, 8, 9, 9, 9, 9, 9, 9, ]
    for (let i = 0; i < arr.length; i++) {
      // j= i+1 从 i 的第二项开始比较 如果相等就是重复项
      for (let j = i + 1; j < arr.length; j++) {
        if (arr[i] === arr[j]) {
          // 重复就会从原数组中删除此项
          arr.splice(i, 1)
          // 并且将索引减一
          i--
        }
      }
    } // [1, 2, 3, 4, 5, 6, 7, 8, 9]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值