数组的去重
对数组进行去重
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])
}
学习网址
- bilibili视屏:https://www.bilibili.com/video/BV1pK411j7Hy
- lodash文档:https://www.lodashjs.com/docs/lodash.uniq