我试图获取数组中最频繁出现的数字,所以对于包含1,2,10,5,1的数组,结果应为1。我编写的代码向我返回了每个数字的频率,所以1次发生两次,2次发生一次,10次发生等等。关于如何解决结果的任何建议?
function mode(arr) {
var uniqNum = {};
var numCounter = function(num, counter) {
if(!uniqNum.hasOwnProperty(num)) {
uniqNum[num] = 1;
} else {
uniqNum[num] ++;
}
};
arr.forEach(numCounter);
return uniqNum;
}
最佳答案
我保持您的代码不变,并添加了一些额外的语句。这是演示:http://codepen.io/PiotrBerebecki/pen/rrdxRo
function mode(arr) {
var uniqNum = {};
var numCounter = function(num, counter) {
if(!uniqNum.hasOwnProperty(num)) {
uniqNum[num] = 1;
} else {
uniqNum[num] ++;
}
};
arr.forEach(numCounter);
return Object.keys(uniqNum)
.sort((a,b) => uniqNum[b] - uniqNum[a]) // sort by frequency
.filter((val,ind,array) => uniqNum[array[0]] == uniqNum[val]) // leave only most frequent
.map(val => Number(val)); // convert text to number
}
console.log( JSON.stringify(mode([3,3,2,4,4])) ) // [3,4]
console.log( JSON.stringify(mode([2,4,3,3])) ) // [3]
关于javascript - 列表中最频繁出现的数字(模式)-只想获得最高的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39937361/