本文主要使用多种方法,来达到数组去重的效果。
- 利用ES6中的Set去重({}无法去重)
function unique (arr) {
return Array.from(new Set(arr))
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
//[1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {}, {}]
- 双for循环遍历,利用splice去重。(ES5常用方法)(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);
j--;
}
}
}
return arr;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
// [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}]
// NaN !== NaN 所以没有去重。
- 利用indexOf去重 (NaN, {} 未去重)
function unique (arr) {
let newArr = []; //申明一个新数组,来装去重后的数组
for(let i = 0; i < arr.length; i++) { // 遍历arr数组,如果当前元素不在newArr数组中,则push进去。
if(newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
// [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {…}, {…}]
- 利用includes({}无法去重)
function unique (arr) {
let newArr = []; //申明一个新数组,来装去重后的数组
for(let i = 0; i < arr.length; i++) { // 遍历arr数组,如果当前元素不在newArr数组中,则push进去。
if(!newArr.includes(arr[i])) {
newArr.push(arr[i]);
}
}
return newArr;
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
// [1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]
- 利用reduce+includes({}无法去重)
function unique (arr) {
return arr.reduce((pre, cur) => {
if(!pre.includes(cur)) {
pre.push(cur)
}
return pre;
}, [])
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
// [1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]
reduce函数返回函数累计处理的结果。
- 利用Map结构({}无法去重)
function unique (arr) {
let map = new Map();
let newArr = [];
for(let i = 0; i < arr.length; i++) {
if(map.has(arr[i])) {
map.set(arr[i], false);
} else {
map.set(arr[i], true);
newArr.push(arr[i]);
}
}
return newArr
}
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
console.log(unique(arr))
// [1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]
- [...new Set(arr)]
var arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,'NaN', 0, 0, 'a', 'a',{},{}];
var newArr = [...new Set(arr)];
console.log(newArr);
// [1, "true", true, 15, false, undefined, null, NaN, "NaN", 0, "a", {…}, {…}]
网友评论