如何在javascript中从数组中获取最重复的值?
这是我的数组
var data = [
{ values: "Number of pips" },
{ values: 4 },
{ values: 4 },
{ values: 4 },
{ values: 5 },
{ values: 2 },
{ values: 6 },
{ values: 6 },
{ values: 5 }
];
结果应该是4
,我怎么能得到这个?
我试过这个,取自Get the element with the highest occurrence in an array
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];
if(modeMap[el] == null)
modeMap[el] = 1;
else
modeMap[el]++;
if(modeMap[el] > maxCount)
{
maxEl = el;
maxCount = modeMap[el];
}
}
return maxEl;
}
但这是返回6, not 4
。
答案 0 :(得分:3)
您尝试编码的问题是您没有数字数组,您有一组对象。如果你想要计算最多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)
我有这个
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);
答案 2 :(得分:-1)