为了账号安全,请及时绑定邮箱和手机立即绑定

js计算数组中元素出现的次数,并实现去重

js计算数组中元素出现的次数,并实现去重

达令说 2019-02-13 14:12:53
希望最后能得到去重的数组,和每一个元素出现的次数
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

如果期望排序根据数值el来的话使用这个:
把count改成el即可!

https://img1.sycdn.imooc.com//5c6648960001822404010117.jpg

function getCount(arr, rank,ranktype){ 

    var obj = {}, k, arr1 = [];

    for (var i = 0, len = arr.length; i < len; i++) {

        k = arr[i];

        if (obj[k]) 

            obj[k]++;

        else 

            obj[k] = 1;

    }

    //保存结果{el-'元素',count-出现次数}

    for (var o in obj) {

        arr1.push({el: o, count: obj[o]});

    }

    //排序(降序)

    arr1.sort(function (n1, n2) {

        return n2.el - n1.el

    });

    //如果ranktype为1,则为升序,反转数组

    if(ranktype===1){

        arr1=arr1.reverse();

    }

    var rank1 = rank || arr1.length;

    return arr1.slice(0,rank1);

}


getCount([2,2,3,1],null,1)//传参(ranktype=1,rank=null),升序返回所有元素出现次数

function getCount(arr, rank,ranktype){ 

    var obj = {}, k, arr1 = [];

    for (var i = 0, len = arr.length; i < len; i++) {

        k = arr[i];

        if (obj[k]) 

            obj[k]++;

        else 

            obj[k] = 1;

    }

    //保存结果{el-'元素',count-出现次数}

    for (var o in obj) {

        arr1.push({el: o, count: obj[o]});

    }

    //排序(降序)

    arr1.sort(function (n1, n2) {

        return n2.count - n1.count

    });

    //如果ranktype为1,则为升序,反转数组

    if(ranktype===1){

        arr1=arr1.reverse();

    }

    var rank1 = rank || arr1.length;

    return arr1.slice(0,rank1);

}


getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2])//默认情况,返回所有元素出现的次数

getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3)//传参(rank=3),只返回出现次数排序前三的

getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],null,1)//传参(ranktype=1,rank=null),升序返回所有元素出现次数

getCount([1,2,3,1,2,5,2,4,1,2,6,2,1,3,2],3,1)//传参(rank=3,ranktype=1),只返回出现次数排序(升序)前三的


查看完整回答
反对 回复 2019-02-15
  • 1 回答
  • 0 关注
  • 796 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信