如何在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; }
这是一个有效的例子
- 对数组进行排序。 (我假设你可以这样做……否则先将它复制到另一个数组上)
- 迭代数组并保持previousVisited项的工作原理