几种常见的数组去重方法
概述
去除数组中重复的元素(原始值、对象)
解答
const source = [
1, 1, 2, 3, 4, 5, 6, 7, 8, 9, '', '', 's', 'str', 'str', '1', '0', '0', NaN, undefined, undefined, NaN, null, null, new Number(1), new Number(11), new Number(11), new String('javascript'), new String('javascript')
]
// 方法一 filter (对NaN、对象无效)
const result = []
source.forEach(value => {
if (result.filter(target => target === value).length === 0) {
result.push(value)
}
})
// 方法二 indexOf (对NaN、对象无效)
const result = []
source.forEach(item => {
if (result.indexOf(item) === -1) {
result.push(item)
}
})
// 方法三 sort (对NaN、对象无效)
const result = []
source.sort().forEach((value, index) => {
if (index === 0 || source[index - 1] !== value) {
result.push(value)
}
})
// 方法四 indexOf + filter (对对象无效,NaN被清除)
const result = source.filter((value, index, array) => {
return array.indexOf(value) === index
})
// ES6 (对对象无效)
const result = Array.from(new Set(source))
// 处理对象 (通吃)
const result = {}
source.filter((value, item, array) => {
return result.hasOwnProperty(typeof value + value) ? false: (result[typeof value + value] = value)
})