JavaScript数组去重

本文详细介绍了JavaScript中去除数组重复元素的7种不同方法,包括使用Set、双层循环、排序后再比较、splice、indexOf、filter以及includes的for循环和forEach结合使用。这些方法各有优缺点,适用于不同的场景,对于理解和掌握JavaScript数组操作有很好的帮助。
摘要由CSDN通过智能技术生成

JavaScript数组去重

1-Set方法

var myarr = [9, 5, 4, 6, 4, 3, 7, 6, 7, 6, 5, 5, 4]
function SetArr1(arr) {
  //Set只能存在唯一值
    let newArr = new Set(arr)
    return Array.from(newArr)
}
 console.log(SetArr1(myarr));

2-定义空数组,for循环遍历比较新旧数组

var myarr = [9, 5, 4, 6, 4, 3, 7, 6, 7, 6, 5, 5, 4]
function SetArr2(arr) {
    let newArr = []
    for (let i = 0; i < arr.length; i++) {
      let bool = false;
      for (let j = 0; j < arr.length; j++) {
        if (newArr[j] === arr[i]) {
          bool = true
          break
        }
      }
      if (!bool) {
        newArr.push(arr[i])
      }
    }
    newArr.sort()
    return (newArr)
}
 console.log(SetArr2(myarr));

3-将元素组排序,再与它相邻的作比较

var myarr = [9, 5, 4, 6, 4, 3, 7, 6, 7, 6, 5, 5, 4]
function SetArr3(arr) {
    let arrs = arr.sort()
    let newArr = []
    for (let i = 0; i < arrs.length; i++) {
      if (arrs[i] !== arrs[i + 1]) {
        newArr.push(arrs[i])
      }
    }
    return (newArr)
 }
 console.log(SetArr3(myarr));

4-用数组的splice

var myarr = [9, 5, 4, 6, 4, 3, 7, 6, 7, 6, 5, 5, 4]
function SetArr4(arr) {
    // let newArr = [];
    let newArr = arr.sort()
    for (let i = 0; i < newArr.length - 1; i++) {
      for (let j = i + 1; j < newArr.length; j++) {
        if (newArr[i] === arr[j]) {
          newArr.splice(j, 1)
          j--
        }
      }
    }
    return newArr
}
 console.log(SetArr4(myarr));

5-用indexof判断

var myarr = [9, 5, 4, 6, 4, 3, 7, 6, 7, 6, 5, 5, 4]
function SetArr5(arr) {
    var newArr = [];
    for (let i = 0; i < arr.length; i++) {
      //indexof方法可返回某个指定的字符串值在字符串中首次出现的位置。
      //如果indexof没有找到数组里面的元素就会返回 -1 则代表数组里不存在这个值 
      if (newArr.indexOf(arr[i]) === -1) {
        //再将数据添加上去
        newArr.push(arr[i])
      }
    }
    return newArr
}
 console.log(SetArr5(myarr));

6-用filter过滤+indexof

var myarr = [9, 5, 4, 6, 4, 3, 7, 6, 7, 6, 5, 5, 4]
function SetArr6(arr) {
    //value为遍历到的值,index为索引,self为原数组
    let newArr = arr.filter(function (value, index, self) {
      //用indexof查原数组的值如果原数组里索引和遍历的索引相等则返回
      return self.indexOf(value) === index;
    })
    return newArr
}
 console.log(SetArr6(myarr));

7-includes的for循环版

var myarr = [9, 5, 4, 6, 4, 3, 7, 6, 7, 6, 5, 5, 4]
function SetArr7(arr) {
    let newArr = []
    //遍历数组用includes判断新数组存不存在值
    for (let i = 0; i < arr.length; i++) {
      if (!newArr.includes(arr[i])) {
        newArr.push(arr[i])
      }
    }
    return newArr
}
 console.log(SetArr7(myarr));

8-includes的forEach和filter版

var myarr = [9, 5, 4, 6, 4, 3, 7, 6, 7, 6, 5, 5, 4]
function SetArr8(arr) {
    let newArr = []
    //forEach
    arr.forEach(item => {
      //includes去查找新数组里存不存在遍历的这一项 
      return newArr.includes(item) ? "" : newArr.push(item)
    })
    //filter同理
    arr.filter(function (item) {
      return newArr.includes(item) ? "" : newArr.push(item)
    })
    return newArr
 }
 console.log(SetArr8(myarr))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值