总结一些数组去重,首先定义一个数组 var arry1=[1,5,6,4,8,4,5,5,40,4,50,7,4,55,6,5,444,5,4,4,2,4,5,7,8,8];
1、最常用的,新建数组利用循环进行数组比对,小数组可以,大的性能不佳。
function removeDuplicatedItem1(ar) { var rest=[]; for(var i=0;i<ar.length;i++){ if (rest.indexOf(ar[i])==-1){ rest.push(ar[i]) }else { console.log(1) } } return rest; } console.log(JSON.stringify(removeDuplicatedItem3(arry1))) //[1,5,6,4,8,40,50,7,55,444,2]
2、推荐使用的,利用对象保存数组for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入对象中。每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。
function removeDuplicatedItem2(ar) { var rest=[]; var object={}; for(var i=0;i<ar.length;i++){ if (!object[ar[i]]){ rest.push(arry1[i]) object[ar[i]]=1 }else { console.log(1) } } console.log(JSON.stringify(object)) return rest; }
console.log(JSON.stringify(removeDuplicatedItem3(arry1))) //[1,5,6,4,8,40,50,7,55,444,2]
3、利用数组下标和forEach()进行比对,其实主要利用到indexOf(),返回该数在数组中第一次出现的位置这一特性。
function removeDuplicatedItem3(ar) { var rest=[]; ar.forEach(function (p1, p2, p3) { if(ar.indexOf(p1)===p2){ rest.push(p1) } }) return rest; }
console.log(JSON.stringify(removeDuplicatedItem3(arry1))) //[1,5,6,4,8,40,50,7,55,444,2]
4、先进行排序,这个其实用 的比较少,主要是因为改变了数组的顺序。
function removeDuplicatedItem4(ar) { ar.sort(); var rest=[]; var end=ar[0]; for(var i=1;i<ar.length;i++){ if (ar[i]!=end){ rest.push(ar[i]); end=ar[i]; }else { console.log(1) } } return rest; }
console.log(JSON.stringify(removeDuplicatedItem3(arry1))) //[1,5,6,4,8,40,50,7,55,444,2]