JavaScript实现一个数组,按照数字出现的频率排序输出
大致思路:
-
将数组的数据和出现次数通过键值对(对象)的形式储存起来,不存在,value值设为1,存在,value值加1.
-
通过Object.key得到一个obj的key值组成的数组。
-
对数组进行排序,通过obj的value对key进行排序
注:排序方法
sort((i,j) => obj[j]-obj[i])
- 遍历数组每一项,在循环对象中数组每一项对应的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)
写的有些乱,但是实现了排序要求,如果有错误的地方或者有更好的实现方法,请多指教