// 输入
var array = [1, 2, 3, 4, 5, 1, 1, 2, 4, 7, 1, 1, 3, 2, 5];
//输出
[1, 2, 3, 4, 5, 7]
一、Array.from + Set
// 兼容性不行并且无法去掉“{}”空对象
Array.from(new Set(array));
二、Set、扩展运算符
// 同上
[...new Set(array)]
三、filter + indexOf
array.filter((a, index, arr)=>{
return self.indexOf(a) === index;
});
四、indexOf
var _array = [];
for (var i = 0; i < array.length; i++) {
if (!~_array.indexOf(array[i])) {
_array.push(array[i])
}
}
五、includes
// 同上
let _array = [];
array.forEach((a)=>{
if(!_array.includes(a)){
_array.push(a);
}
});
六、上面【五】reduce版本
//上面【5】reduce版本
var _array = array.reduce(function (res, a, i, arr) {
if(!res.includes(a)){
res.push(a);
}
return res;
}, []);
七、上面简写版本
// 上面简写版本
var _array = array.reduce((res, a) => res.includes(a) ? res : [...res, a],[]);
八、利用双层for嵌套 splice去重
// ES5
for(var i=0; i<array.length; i++){
for(var j=i+1; j<array.length; j++){
if(array[i]==array[j]){//第一个等同于第二个,splice方法删除第二个
array.splice(j,1);
j--;
}
}
}
九、排序之后前后相互判断去重
array = array.sort();
var _arrry = [array[0]];
for (var i = 1; i < array.length; i++) {
if (array[i] !== array[i-1]) {
_arrry.push(array[i]);
}
}
十、递归去重
var len = array.length;
array.sort(); //先排序
function loop(index){
if(index >= 1){
if(array[index] === array[index-1]){
array.splice(index,1);
}
loop(index - 1);
}
}
loop(len-1);
console.log(array);
十一、对象属性 对象属性不能重复
var _array = [];
var obj = {};
array.forEach((a, i, arr)=> {
if (!obj[a]) {
_array.push(a)
obj[a] = 1;
} else {
obj[a]++;
}
});
console.log(_array);
十二、hasOwnProperty
var obj = {};
var _array = array.filter(function(item, index, arr){
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true);
})
十三、Map
var map = new Map();
var _array = new Array(); // 数组用于返回结果
for (let i = 0; i < array.length; i++) {
if(map.has(array[i])) { // 如果有该key值
map.set(array[i], true);
} else {
map.set(array[i], false); // 如果没有该key值
_array.push(array[i]);
}
}
网友评论