如何在javascript中从Array中获取大多数重复值

如何在javascript中从数组中获取最重复的值?

这是我的arrays

var data = [ { values: "Number of pips" }, { values: 4 }, { values: 4 }, { values: 4 }, { values: 5 }, { values: 2 }, { values: 6 }, { values: 6 }, { values: 5 } ]; 

结果应该是4 ,我怎么能得到这个?

我试过这个,取自Get数组中出现次数最多的元素

 function mode(array) { if(array.length == 0) return null; var modeMap = {}; var maxEl = array[0], maxCount = 1; for(var i = 0; i  maxCount) { maxEl = el; maxCount = modeMap[el]; } } return maxEl; } 

但这是6, not 4

我懂了

 var arr= [{ values: "Number of pips" }, { values: 4 }, { values: 4 }, { values: 4 }, { values: 5 }, { values: 2 }, { values: 6 }, { values: 6 }, { values: 5 }]; var uniqs = {}; for(var i = 0; i < arr.length; i++) { uniqs[arr[i].values] = (uniqs[arr[i].values] || 0) + 1; } var max = { val: arr[0], count: 1 }; for(var u in uniqs) { if(max.count < uniqs[u]) { max = { val: u, count: uniqs[u] }; } } alert(max.val); 

DEMO

您尝试编码的问题是您没有数字数组,您有一个对象数组。 如果要计算最多的values则必须使用该值,而不是整个对象。

关于您尝试过的代码,您只需要更改以下行:

 var el = array[i].values; 

这是完整的代码:

 function mode(array) { if(array.length == 0) return null; var modeMap = {}; var maxEl = array[0], maxCount = 1; for(var i = 0; i < array.length; i++) { var el = array[i].values;// This is the change. if(modeMap[el] == null) modeMap[el] = 1; else modeMap[el]++; if(modeMap[el] > maxCount) { maxEl = el; maxCount = modeMap[el]; } } return maxEl; } 

这是一个有效的例子

  1. 对数组进行排序。 (我假设你可以这样做……否则先将它复制到另一个数组上)
  2. 迭代数组并保持previousVisited项的工作原理