1.最基本的去重要领
思绪:定义一个新数组,并寄存原数组的第一个元素,然后将元素组一一和新数组的元素对比,若差别则寄存在新数组中。
function unique(arr){
var res = [arr[0]];
for(var i=1;i<arr.length;i++){
var repeat = false;
for(var j=0;j<res.length;j++){
if(arr[i] == res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(arr[i]);
}
}
return res;
}
2.先排序在去重
思绪:先将原数组排序,在与相邻的举行比较,假如差别则存入新数组
function unique(arr){
var arr2 = arr.sort();
var res = [arr2[0]];
for(var i=1;i<arr2.length;i++){
if(arr2[i] !== res[res.length-1]){
res.push(arr2[i]);
}
}
return res;
}
3.应用对象的属性去重(引荐)
思绪:每次掏出原数组的元素,然后再对象中接见这个属性,假如存在就申明反复
function unique(arr){
var res =[];
var json = {};
for(var i=0;i<arr.length;i++){
if(!json[arr[i]]){
res.push(arr[i]);
json[arr[i]] = 1;
}
}
return res;
}
4.应用下标查询
function unique(arr){
var newArr = [arr[0]];
for(var i=1;i<arr.length;i++){
if(newArr.indexOf(arr[i]) == -1){newArr.push(arr[i]); } } return newArr; }
5.应用es6
- Set数据构造,它类似于数组,其成员的值都是唯一的。 应用Array.from将Set构造转换成数组
- function dedupe(array){ return Array.from(new Set(array)); }
dedupe([1,1,2,3]) //[1,2,3] 拓展运算符(…)内部运用for…of轮回let arr = [1,2,3,3]; let resultarr = […new Set(arr)];
console.log(resultarr); //[1,2,3]
6.concat()要领
思绪:concat() 要领将传入的数组或非数组值与原数组兼并,构成一个新的数组并返回。该要领会发生一个新的数组。
function concatArr(arr1, arr2){
var arr = arr1.concat(arr2);
arr = unique1(arr);//再援用上面的恣意一个去重要领
return arr;
}
7.Array.prototype.push.apply()
思绪:该要领长处是不会发生一个新的数组。
var a = [1, 2, 3]; var b = [4, 5, 6]; Array.prototype.push.apply(a,
b);
//a=[1,2,3,4,5,6] //等效于:a.push.apply(a, b); //也等效于[].push.apply(a,
b);
function concatArray(arr1,arr2){
Array.prototype.push.apply(arr1, arr2);
arr1 = unique1(arr1);
return arr1;
}
8.arr.filter()
var arr = [0,0,1,'a',1,2,'b','a','a'];
var res = arr.filter(function(ele,index,array){
return index === array.indexOf(ele);
});
document.write(res);