js数组去重的方法

1双层for循环遍历数组

let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]
// 双层for循环遍历数组
function f (arr) {
  for (var i = 0; i < arr.length; i++) {
    for (var j = i + 1; j < arr.length; j++) {
      if (arr[i] == arr[j]) {
        arr.splice(j, 1)
        j--
      }
    }
  }
  return arr
}
let newArr = f(arr)
console.log(newArr)

其余的双层for循环都大同小异

2利用forEach和indexOf

let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]
// 用indexOf 去重
function f (arr) {
  let newArr = []
  arr.forEach(item => {
    if (newArr.indexOf(item) === -1){
      newArr.push(item)
    }
  })
  return newArr
}
let newArr = f(arr)
console.log(newArr)

这个方法的判断条件也可以换成其他的api 都是大同小异
判断条件可以用 includes() ,indexOf(),lastIndexOf() , find() ,findIndex(),some() , every()

3用sort排序以后 相邻计较 去重

let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]
// 用sort排序以后 相邻计较 去重
function f (arr) {
  arr = arr.sort()
  var arrry = []
  arr.forEach((item, i) => {
    arr[i] !== arr[i - 1] ? arrry.push(arr[i]) : ''
  });
  return arrry;
}
let newArr = f(arr)
console.log(newArr)

4 利用对象属性不能重复

let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]
// 对象属性不能重复
function f (arr) {
  let arrry = []
  let obj = {}
  for (var i = 0; i < arr.length; i++) {
    if (!obj[arr[i]]) {
      arrry.push(arr[i])
      obj[arr[i]] = 1
    } else {
      obj[arr[i]]++
    }
  }
  return arrry;
}
let newArr = f(arr)
console.log(newArr)

5 reduce去重

let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]
// reduce
function f (arr) {
  return arr.reduce((t, v) => t.includes(v) ? t : [...t, v], []);
}
let newArr = f(arr)
console.log(newArr)

嗯 reduce还是内个牛逼的reduce
这个方法的判断条件和 第2个 一样 作为判断条件的api很多

6.hasOwnProperty(回头研究)

let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]
// 
function f (arr) {
  var obj = {}
  return arr.filter(function (item, index, arr) {
    return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
  })
}
let newArr = f(arr)
console.log(newArr)

在这里插入图片描述
这玩意我没研究懂 等回头补吧
就是这玩意好几把炫酷 一副看不懂的样子
这玩意好像还很牛逼 可以去重相同类型比如 null undefined NaN

7递归去重

let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]
// 递归去重
function f (arr) {
  let len = arr.length
  arr.sort()
  console.log(arr)
  function loop (index) {
    if (index >= 1) {
      if (arr[index] === arr[index - 1]) {
        arr.splice(index, 1)
      }
      loop(index - 1)    //递归loop,然后数组去重
    }
  }
  loop(len - 1)
  return arr;
}
let newArr = f(arr)
console.log(newArr)

8 map数据结构去重

let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]

// 递归去重
function f (arr) {
  let map = new Map()
  let array = new Array()  // 数组用于返回结果
  for (let i = 0; i < arr.length; i++) {
    if (map.has(arr[i])) {  // 如果有该key值
      map.set(arr[i], true)
    } else {
      map.set(arr[i], false)   // 如果没有该key值
      array.push(arr[i])
    }
  }
  return array; 
}
let newArr = f(arr)
console.log(newArr)

9 最后来个牛逼的

let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]
let newArr = [...new Set(arr)]
console.log(newArr)

** 这他**** 牛*
诶 自己研究吧 MDN

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值