1.使用es6提供的set、Array.from()
var arr = [1, '1', 2, 3, null, null, undefined, undefined, NaN, NaN]
var target = Array.from(new Set(arr)) // [...new Set(arr)]
结果: [1, '1', 2, 3, null, undefined, NaN]
2.遍历数据
var arr = [1, '1', '1', 2, 3, 4, undefined, undefined, NaN, NaN, null, null]
var res = []
arr.forEach(item => {
if (res.indexOf(item) < 0) {
res.push(item)
}
})
console.log(res) // [1, "1", 2, 3, 4, undefined, NaN, NaN, null]
缺点:无法去除NaN, 因为NaN !== NaN
var arr = [1, '1', '1', 2, 3, 4, undefined, undefined, NaN, NaN, null, null]
var obj = {}
var res = []
arr.forEach(item => {
if (!obj[item]) {
res.push(item)
obj[item] = 1
}
})
console.log(res) // [1, 2, 3, 4, undefined, NaN, null]
缺点: 1 和 ‘1’会视为同一个属性
3.正则(数字数组)
var arr = [1, 1, 2, 2, 3, 4]
var str = arr.join('@') + '@'
var reg = /(\d+@)\1*/g
var target = []
str.replace(reg, (val, group) => {
target.push(Number(group.slice(0, group.length - 1)))
})
console.log(target) // [1, 2, 3, 4]
缺点:应用于纯数字的数组哦!!!