数组去重 和 数组排序方法总结
数组排序
//方法1 // 数组中前一项跟后一项作比较,如果前边的比后边的大,则前后换一下位置 function px1(ary){ var len=ary.length,temp; if(len<=1){ return ary; } for(var i=0;i<len;i++){ for(var j=i+1;j<len;j++){ if(ary[i]>ary[j]){ temp=ary[i]; ary[i]=ary[j]; ary[j]=temp; } } } return ary; } var ary1=[3,1,8,6,9,0,12]; console.log(px1(ary1)); //方法2 取出数组的中间值 // 将数组中的每一项跟中间值midVal作比较 // 比midVal小的放left数组中,比midVal大的放到right数组中,以此循环 然后再将数组拼接 function px2(ary){ if(ary.length <= 1){ return ary; } var midIndex=Math.floor(ary.length/2), midVal=ary.splice(midIndex,1), left=[], right=[]; for(var i=0;i<ary.length;i++){ if(ary[i] < midVal){ left.push(ary[i]); }else{ right.push(ary[i]); } } return px2(left).concat(midVal,px2(right)); } var ary2=[3,1,8,6,9,0,12]; console.log(px2(ary2));
数组去重
//方法1 简单去重 function qc1(ary){ var len=ary.length,temp=[]; for(var i=0;i<len;i++){ if(temp.indexOf(ary[i]) == -1){ temp.push(ary[i]); } } return temp; } var ary1=[1,6,2,5,2,2,6,1]; console.log(qc1(ary1)); //方法2 把数组排序后,前一项和后一项作比较,如果不一致的话添加到新数组 function qc2(ary){ var len=ary.length,temp=[]; ary.sort(); for(var i=0;i<len;i++){ if(ary[i]!=ary[i+1]){ temp.push(ary[i]); } } return temp; } var ary2=[1,6,2,5,2,2,6,1]; console.log(qc2(ary2)); //方法3 通过indexOf判断元素在该数组中第一次出现位置的索引值是不是当前的i,如果是的话就添加到新数组中 function qc3(ary){ var len=ary.length,temp=[]; for(var i=0;i<len;i++){ if(ary.indexOf(ary[i]) == i){ temp.push(ary[i]); } } return temp; } var ary3=[1,6,2,5,2,2,6,1]; console.log(qc3(ary3)); //方法4 function qc4(ary){ var len=ary.length,temp=[]; for (var i=0;i<len;i++){ for(var j=1;j<l;j++){ if(ary[i] === ary[j]){ temp.push(ary[i]) } } } return temp; } var ary4=[1,6,2,5,2,2,6,1]; console.log(qc3(ary4)); //方法5 function qc5(array){ var temp = {}, r = [], len = array.length, val, type; for (var i = 0; i < len; i++) { val = array[i]; type = typeof val; if (!temp[val]) { temp[val] = [type]; r.push(val); } else if (temp[val].indexOf(type) < 0) { temp[val].push(type); r.push(val); } } return r; } var ary5 =[1,6,2,5,2,2,6,1]; console.log(qc5(ary5));