先生成一个数组,数字里边的元素是随机生成的10以内数字
let arr = Array.from({length:20},=>Math.random()*10|0);
console.log(arr);
//输出结果:
[5,4,7,0,0,0,8,0,2,9,3,0,0,1,5,9,2,8,6,0]
双层循环
双层循环,外层循环元素,内层循环时比较值,值相同时,则删去这个值
// 此种方法会改变原数组的值
Array.prototype.distinct = function (){
var arr = this,
i,
j,
len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
len--;
j--;
}
}
}
return arr;
};
var a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56
// 不改变原数组
Array.prototype.distinct = function(){
var arr = this,
result = [],
i,
j,
len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] === arr[j]){
j = ++i;
}
}
result.push(arr[i]);
}
return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct()
indexOf的使用
let rs = [];
for(let i=0;i<arr.length;i++){
if(rs.indexOf arr[i] === -1){
rs.push(arr[i])
}
};
console.log(rs)
数组的filter方法
arr.filter(function(element,index,self){
return self.indexOf(element) === index;
});
element是数组的每个值,index是数组的索引,self是数组本身。
当使用indexOf方法时,如果数组的每项的indexOf方法得到的值与数组索引相同,则证明此值第一次出现
对象去重法
var o={};
var new_arr=[];
for(var i=0;i<arr.length;i++){
var k=arr[i];
if(!o[k]){
o[k]=true;
new_arr.push(k);
}
}
利用对象的key来做判断时,只用到了一次循环,大大增加运行的性能
Set
[...new Set(arr)]