JavaScript实现一个数组,按照数字出现的频率排序输出

JavaScript实现一个数组,按照数字出现的频率排序输出

大致思路:

  1. 将数组的数据和出现次数通过键值对(对象)的形式储存起来,不存在,value值设为1,存在,value值加1.

  2. 通过Object.key得到一个obj的key值组成的数组。

  3. 对数组进行排序,通过obj的value对key进行排序

注:排序方法sort((i,j) => obj[j]-obj[i])

  1. 遍历数组每一项,在循环对象中数组每一项对应的value次数,再依次插入新数组中。
var arr = [1,2,4,2,4,1,6,3,4,6,6]
function Numsort(arr){
    var obj = {}
    //将数组中的数和出现的次数利用对象键值对的方式进行存储
    for(var i = 0 ;i < arr.length ; i++){
        if(!obj[arr[i]]){
            obj[arr[i]] = 1;
        }
        else{
            obj[arr[i]] = Number(obj[arr[i]])+ 1
        }
    }
    console.log(obj)
    //把对象的key值变成数组并通过value值的大小进行排序
    var sortArr = Object.keys(obj).sort((i,j) => obj[j]-obj[i])//排序方法的使用
    console.log(sortArr)
    var newArr = []
    for(var i = 0;i < sortArr.length; i++){
        for(var j = 0; j < obj[sortArr[i]]; j++){
            newArr.push(Number(sortArr[i]))
        }
    }
    console.log(newArr)
}
Numsort(arr) 

写的有些乱,但是实现了排序要求,如果有错误的地方或者有更好的实现方法,请多指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值