主题
数组去重
indexOf
js
function unique (arr) {
return arr.filter((item, index) => arr.indexOf(item) === index)
}
indexOf 底层用 ===
,所以认为 NaN !== NaN
,所以 NaN 会被过滤,无论有没有重复
Set
js
function unique(arr) {
return [...new Set(arr)]
}
键值对方法
js
function unique (arr) {
const obj = {}
return arr.filter(item => {
return obj.hasOwnProperty(item) ? false : (obj[item] = true)
})
}
区分类型,比如 1 和 '1'
js
function unique (arr) {
const obj = {}
return arr.filter(item => {
const key = typeof item + item
return obj.hasOwnProperty(key) ? false : (obj[key] = true)
})
}
区分是不是同一个对象
js
function unique (arr) {
const obj = {}
return arr.filter(item => {
const key = typeof item + JSON.stringify(item)
return obj.hasOwnProperty(key) ? false : (obj[key] = true)
})
}
对于正则不能判断,应为 JSON.stringify
后都是 {}
测试
js
[1, 1, '1', '1', null, null, undefined, undefined, new String('1'), new String('1'), /a/, /a/, NaN, NaN];
方法 | 结果 | 说明 |
---|---|---|
indexOf | [1, "1", null, undefined, String, String, /a/, /a/] | 对象不去重 NaN 会被忽略掉 |
Set | [1, "1", null, undefined, String, String, /a/, /a/, NaN] | 对象不去重 NaN 去重 |
键值对方法 | [1, "1", null, undefined, String, /a/, NaN] | 全部去重 |