我试图获取数组中最频繁出现的数字,所以对于包含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/

10-10 15:20