1、ES6: new Set() Set对象是值的集合,里面的元素唯一,不能去除空对象{}; 2、indexOf 3、includes 4、sort 5、splice()
1、new Set()
let arr = [1, 2, 2, 'a', 'a', 3, null, null, undefined, undefined, NaN, NaN, {}, {}]
let arr1 = Array.from(new Set(arr))
// let arr1 = [...new Set(arr)]
console.log(arr1); // [1, 2, "a", 3, null, undefined, NaN, {}, {}]
2、indexOf() 不能去除空对象{} 和 NaN
let arr = [1, 2, 2, 'a', 'a', 3, null, null, undefined, undefined, NaN, NaN, {}, {}]
function unique(arr) {
let arr1 = []
arr.forEach(item => {
arr1.indexOf(item) === -1 && arr1.push(item)
})
return arr1
}
console.log(unique(arr)); // [1, 2, "a", 3, null, undefined, NaN, NaN, {}, {}]
3、includes()
let arr = [1, 2, 2, 'a', 'a', 3, null, null, undefined, undefined, NaN, NaN, {}, {}]
function unique(arr) {
let arr1 = []
arr.forEach(item => {
!arr1.includes(item) && arr1.push(item)
})
return arr1
}
console.log(unique(arr)); // [1, 2, "a", 3, null, undefined, NaN, {}, {}]
4、sort() 排序后,相邻元素比较
let arr = [1, 2, 2, 'a', 'a', 3, null, null, undefined, undefined, NaN, NaN, {}, {}]
function unique(arr) {
let arr1 = arr.sort()
let array =[arr1[0]]
for (let i = 1;i < arr1.length;i++) {
if (arr1[i] !== arr1[i-1]) {
array.push(arr1[i])
}
}
return array
}
console.log(unique(arr)); // [1, 2, 3, NaN, NaN, {}, {}, "a", null, undefined]
5、splice() 两个for循环,
let arr = [3, 3, 3, 'a', 'a', 3, null, null, undefined, undefined, NaN, NaN, {}, {}]
function unique(arr) {
for (let i = 0;i < arr.length; i++) {
for (let j = i + 1;j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1) // 第二个和第一个相同,删除第二个,第二次遍历索引值必需减1,再次比较
j--
}
}
}
return arr
}
console.log(unique(arr));
网友评论