05 数组去重的方法

数组的去重

对数组进行去重

let arr = [1,3,3] 
let result = []
使用第三方库lodash的_uniq()

创建一个去重后的array数组副本。使用了SameValueZero 做等值比较。只有第一次出现的元素才会被保留。

result = _uniq(arr)); // [1,3]
使用对象的key属性特点

对象的obj.key1 = ‘value1’,如果对象obj 中有key1那么就会重新赋值,如果没有key1就会新增一个key1并赋值,再通过Object.keys() 拿到所有的key值

arr.forEach((item,index)=>{
   result[arr[index]] = '随意'
})
// result = Object.keys(result) // ["1", "3"] 数组元素有引号,使用map()双波浪线快速去掉引号
result = Object.keys(result).map(item=>~~item) // ["1", "3"]  
使用 Set 集合

Set 是ES6的一种数据结构,和对象类似,key是唯一的, 得到一个key唯一的Set,然后通过扩展运算符(spread)是三个点(...)或者Array.form 转为数组

result = [...new Set(arr)]
result = Array.from(new Set(arr))
循环使用 indexOf() 判断

result 中是否存在某元素再决定 push

arr.forEach(item=>{
  if(result.indexOf(item) == -1) result.push(item)
})
使用filter()

indexof 会找到数组中第一个出现item 的位置,当arr.indexOf(item) 出现的位置和index 不一致时,表示item前面已经有一个相同的item了,所以要filter(过滤)掉

result = arr.filter((item ,index)=>{
   return arr.indexOf(item) ===index
})
使用rudece()

reduce 的使用方法:array.reduce((total, currentValue, currentIndex, arr)=>{}, iniValue)

接收一个函数作为累加器,和一个初始值。

result = arr.reduce((pre,item)=>{
  return pre.includes(item) ? pre : [...pre,item]
},[])
双重循环
for (let i = 0; i < arr.length; i++) {
  for (let j = i+1; j < arr.length; j++) {
    if(arr[i] === arr[j]) i++; 
  }
  result.push(arr[i])
}
排序后在前后比较
let temArr = arr.sort()
for (let i = 0; i < temArr.length; i++) {
  if(temArr[i] === temArr[i+1]) i++ //前后一样,直接跳过此次循环
  result.push(arr[i])
}
学习网址
  1. bilibili视屏:https://www.bilibili.com/video/BV1pK411j7Hy
  2. lodash文档:https://www.lodashjs.com/docs/lodash.uniq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值