数组去重
以下方法若未说明,则均无法对对象进行去重,但方法 6 可以对空对象进行去重
var arr = [
1, 1, 'true', 'true', true, true, 15, 15,
false, false, undefined, undefined,
null, null, NaN, NaN, 'NaN', 0, 0, 'a', 'a', {}, {}
];
es6 Set 去重
function unique(arr) {
return Array.from(new Set(arr));
}
for 嵌套 for,splice 去重
function unique2(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
indexOf 去重
function unique3(arr) {
if (!Array.isArray(arr)) {
console.log('type error!');
return;
}
var array = [];
for (var i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i]) === -1) {
array.push(arr[i]);
}
}
return array;
}
sort 去重
function unique4(arr) {
if (!Array.isArray(arr)) {
console.log('type error!');
return;
}
arr = arr.sort();
var array = [arr[0]];
for (var i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
array.push(arr[i]);
}
}
return array;
}
includes 去重
function unique5(arr) {
if (!Array.isArray(arr)) {
console.log('type error!');
return;
}
var array = [];
for (var i = 1; i < arr.length; i++) {
if (!array.includes(arr[i])) {
array.push(arr[i]);
}
}
return array;
}
hasOwnProperty 去重
function unique6(arr) {
var obj = {};
return arr.filter(function (item, index, arr) {
return obj.hasOwnProperty(item) ? false : (obj[item] = true);
});
}
filter 去重
function unique7(arr) {
return arr.filter(function (item, index, arr) {
return arr.indexOf(item, 0) === index;
});
}
es6 Map 去重
function unique8(arr) {
let map = new Map();
let array = new Array();
for (let i = 0; i < arr.length; i++) {
if (map.has(arr[i])) {
map.set(arr[i], true);
} else {
map.set(arr[i], false);
array.push(arr[i]);
}
}
return array;
}
reduce + includes 去重
function unique9(arr) {
return arr.reduce(
(prev, cur) => (prev.includes(cur) ? prev : [...prev, cur]),
[]
);
}