主题
数组去重
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] | 全部去重 |
