数组去重
- 使用计数排序的思路,缺点是只支持字符串
javascript
var uniq = function (a) {
var map = {}
for (let i = 0; i < a.length; i++) {
let number = a[i]
if (typeof number === 'undefined') { continue }
if (number in map) { continue }
map[number] = true
}
const result = []
for(let key in map) {
result.push(parseInt(key))
}
return result
}
- 使用Set(面试已经禁止这种了,因为太简单)
javascript
// 写法1
var uniq = function (a) {
return Array.from(new Set(a))
}
// 写法2
var uniq = function (a) {
return [...new Set(a)]
}
- 使用Map,缺点是兼容性差了
javascript
var uniq = function (a) {
var map = new Map()
for(let i = 0; i < a.length; i++) {
let number = a[i]
if (typeof number === 'undefined') { continue }
if (map.has(number)) { continue }
map.set(number, true)
}
return [...map.keys()]
}
javascript
/**
* @description 数组去重,指定对应key
*/
var uniq = function (arr, key) {
return [...new Map(arr.map(item => [item[key], item])).values()];
}
reduce
+include
javascript
var uniq = function (arr) {
return arr.reduce((pre, cur) => {
return pre.include(cur) ? pre : [...pre, cur]
}, [])
}