對(duì)于數(shù)組項(xiàng)為基本類型(基本為數(shù)字或字符串)的:
- 使用filter數(shù)組去重
var arr = [1, 2, 2, 3, 4, 5, 5, 6, 6, 6, 7]
function fn(arr) {
return arr.filter((x, index, self) => self.indexOf(x) === index)
}
比較簡(jiǎn)單粗暴躺彬,利用indexOf只會(huì)找到第一個(gè)匹配項(xiàng)的下標(biāo)這個(gè)特性伸辟,忽略重復(fù)的數(shù)組項(xiàng)麻惶。
- 利用對(duì)象的key去重
var arr = [1, 2, 2, 3, 4, 5, 5, 6, 6, 6, 7]
function fn(arr) {
let hashTable = {}
let data = []
for (let i = 0; i < arr.length; i++) {
if (!hashTable[arr[i]]) {
hashTable[arr[i]] = true
data.push(arr[i])
}
}
return data
}
利用了對(duì)象的key值去重,當(dāng)然信夫,對(duì)于這種數(shù)組項(xiàng)為基本類型的數(shù)組窃蹋,去重還有很多方法卡啰,es6出了Set這種數(shù)據(jù)類型,對(duì)普通數(shù)組的去重更是簡(jiǎn)單粗暴警没。
但在工作中匈辱,去重的需求并不是那么簡(jiǎn)單,往往數(shù)組是一個(gè)對(duì)象數(shù)組杀迹,然后根據(jù)其中的某一個(gè)字段去重亡脸,對(duì)于這種需求,我們還是可以用上面的方法树酪,利用對(duì)象的key值去重:
let arr1 = [{id: 1}, {id: 2}, {id: 3}, {id: 4}]
let arr2 = [{id: 5}, {id: 2}, {id: 3}, {id: 8}]
// 比如這個(gè)浅碾,兩個(gè)數(shù)組合并然后根據(jù)id這個(gè)字段去重
function fn(arr1,arr2){
let arr = arr1.concat(arr2)
let hashTable = {}
let data = []
for (let i = 0; i < arr.length; i++) {
if (!hashTable[arr[i].id]) {
hashTable[arr[i].id] = true
data.push(arr[i])
}
}
return data
}
覺(jué)得這個(gè)利用key值的方式還是挺萬(wàn)能的,之后看到還有好的方式超人鴨也會(huì)繼續(xù)添加在這篇文章里面嗅回。