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]]

 

posted @ 2019-04-28 11:18  南瓜壳  阅读(1126)  评论(0编辑  收藏  举报