Javascript计算模式

Javascript计算模式,javascript,node.js,Javascript,Node.js,我有一些问题,如何真正获得最大的价值的地图,我已经得到。现在,我的代码只显示每个键的实际计数值,我一直在尝试记录最大值,我认为在我的代码中发生的是,for循环通过counts[key]数组,但它将保持为1,这是第一个值并停止,因为记录的唯一数字是1。我并不期望得到真正的答案,也许一些提示和提示会引导我走上正确的道路。提前谢谢 var模式=功能(数据){ 变量计数={}; for(设i=0;i

我有一些问题,如何真正获得最大的价值的地图,我已经得到。现在,我的代码只显示每个键的实际计数值,我一直在尝试记录最大值,我认为在我的代码中发生的是,for循环通过counts[key]数组,但它将保持为1,这是第一个值并停止,因为记录的唯一数字是1。我并不期望得到真正的答案,也许一些提示和提示会引导我走上正确的道路。提前谢谢

var模式=功能(数据){
变量计数={};
for(设i=0;ilog(模式([1,5,2,3,3,4,4])此数组中需要更高的计数数。请尝试此操作

var max=0;
var模式=功能(数据){
变量计数={};
for(设i=0;imax){max=counts[key];}
}
}
返回最大值;
}
log(模式([1,5,2,3,3,4,4,4])//4是更高的计数

日志(模式([5,5,5,5,5,5,5,2,3,3,4])//5是更高的计数
我最终通过使用以下代码解决了此问题:

var Mode = function(data) {
var counts = {};
for (let i = 0; i < data.length; i++) {
    counts[data[i]] = (counts[data[i]] || 0) + 1
}
var max = 0;
var values = [];
for (var key in counts) {
    if (counts.hasOwnProperty(key)) {
        if (counts[key] > max) {
            max = counts[key];
            values = [key];
        } else if (counts[key] === max) {
            max = counts[key];
            values.push(key);
        }
    }
}
return "The highest value is " + values.join(", ") + " with a count of " + max;
}
console.log(Mode([1, 2, 3, 3, 4, 4]));
var模式=功能(数据){
变量计数={};
for(设i=0;i最大值){
最大值=计数[键];
值=[键];
}否则如果(计数[键]==最大值){
最大值=计数[键];
值。按(键);
}
}
}
返回“最大值为”+值。使用“+最大值”计数连接(“,”+”;
}
log(模式([1,2,3,3,4,4]);
非常感谢您的帮助:)。

功能模式(数字){
//结果可能是双峰或多峰,
//返回的结果作为数组提供
//[3,5,4,4,1,1,2,3]=[1,3,4]的模式
变量模式=[],计数=[],i,数字,最大索引=0;
对于(i=0;i最大索引){
maxIndex=计数[数字];
}
}
因为(我算在内)
if(计算hasOwnProperty(i)){
if(计数[i]==最大索引){
模式。推送(数量(i));
}
}
返回模式;
}
log(模式([1,2,4,1,4,4]);//4.
log(模式([1,20,3,20,4,20]);//20

正确答案是什么?4或5?正确答案应该是3,因为我的代码实际上从数据中计算每个数组值,所以基本上是'1'=1;'2' = 2; '3' = 2; '4' = 3; '5' = 1; 我实际上在寻找的是比较数据数组的实际计数,这就是为什么我把所有这些都放在一个图中,现在我试图比较每个值并记录正确的答案,但在您的示例中,
4
的计数最高。可能只是一条注释的重复。。。按照惯例,函数的第一个大写字母是“newmode()”。只是传递评论:)
function mode(numbers) {
    // as result can be bimodal or multi-modal,
    // the returned result is provided as an array
    // mode of [3, 5, 4, 4, 1, 1, 2, 3] = [1, 3, 4]
    var modes = [], count = [], i, number, maxIndex = 0;
 
    for (i = 0; i < numbers.length; i += 1) {
        number = numbers[i];
        count[number] = (count[number] || 0) + 1;
        if (count[number] > maxIndex) {
            maxIndex = count[number];
        }
    }
 
    for (i in count)
        if (count.hasOwnProperty(i)) {
            if (count[i] === maxIndex) {
                modes.push(Number(i));
            }
        }
 
    return modes;
}

console.log(mode([1, 2, 4, 1, 4, 4]));   // 4
console.log(mode([1, 20, 3, 20, 4, 20])); // 20