js实现数组的排序和分组
问题:
data=[1,1,1,1,2,2,2,2,5,5,5,8,8,8,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4]
怎么把值为1,2,3,4,5,8的数据分成6个数组存储形如
[[1,1,1,1],[2,2,2,2],[3,3,3,3,3,3,3,3,3,3],[4,4,4,4,4,4,4],[5,5,5],[8,8,8]];
解答:
<script> var $arr=[1,1,1,1,2,33,44,12,3,4,4,4,4,4,6,6,6,6,6,6,6,6,6,7,7,7,7,7,123,34,12,2,2,133,33];
//先进行排序 $arr=$arr.sort(function(a,b){ return a-b; }) var hash={}; var arr=[]; var n=-1; for(var i=0;i<$arr.length;i++){ if(!hash[$arr[i]]){ n++; hash[$arr[i]]=true; arr[n]=[]; }; arr[n].push($arr[i]); } console.log(arr); </script>
可以利用原型做进一步的封装
Array.prototype.sortGroup=function(){ var arr=[],hash={},result=[],n=-1,len=this.length; arr=this.sort(function(a,b){ return a-b; }) for(var i=0;i<len;i++){ if(!hash[arr[i]]){ n++; hash[arr[i]]=true; result[n]=[]; }; result[n].push(arr[i]); } return result; } var a=[1,2,3,3,3,3,3,3,11,23,23,23,11]; console.log(a.sortGroup()) // 结果:[[1],[2],[3,3,3,3,3,3],[11,11],[23,23,23]]
能工摹形,巧匠窃意。