javascript - 如何使用 JavaScript 找到出现次数最多的数字?

标签 javascript count find-occurrences

如果用户输入 5 个数字,比方说... 4, 4, 7, 7, 4 . 4 发生了 3 次(最多)。所以输出应该是 4 .

我如何使用 JavaScript 做到这一点?非常感谢您的帮助。
谢谢!

到目前为止我已经尝试过这个。它有效,但它太长了,寻找简短而简单的方法。

附言这不是我的作业!

    var n = parseInt(prompt("How many numbers do you like to enter?", ""));
    var num = new Array();

    for (i = 1; i <= n; i++) {
        num[i] = parseInt(prompt("Enter a number", ""));
        document.write("Entered numbers are: " + num[i] + "<br/>");
    }

    var total = new Array();
    for (i = 1; i <= n; i++) {
        var count = 1;
        for (j = i + 1; j <= n; j++) {
            if (num[i] == num[j]) {
                count++;
            }
            total[i] = count;
        }
    }

    var most = 0;
    for (i = 0; i < n; i++) {
        if (most < total[i]) {
            most = total[i];
        }
        var val = i;
    }
    document.write("<br/>" + num[val] + " is occurred " + most + " times");

最佳答案

创建一个 array a有很多数字,使用 array literals :

var a = [1, 2, 3, 4, 4, 5, 1, 2, 3, 1, 2, 1, 1];
创建一个普通对象 o , 使用 object literals .
var o = {},          /* Creates a new object */
    i = 0,           /* Declare variable i, initialise value at 0*/
    m = {m:0,t:null},
    t,               /* Declare variable t */
    len = a.length;  /* Declare variable len, set value to the array's length */
循环遍历数组 a使用 for(;;) -loop并增加计数器。计数器存储在对象 o 上的哈希映射中.(o[a[i]] || 0)键第一次出现时需要:当未找到时,值 0用于代替 undefined .另见 Short-circuit evaluation: Logical OR .
for ( ; i < len ; i++ ) {
    o[ a[i] ] = ( o[ a[i] ] || 0 ) + 1;
}
那么你就有了一个对象 o看起来像:
o = {
    "1": 5,
    "2": 3,
    "3": 2,
    "4": 2,
    "5": 1
}
然后循环遍历 o使用 for(.. in ..) -loop并找到出现的最大次数。
在循环的底部,conditional ternary .. ? .. : .. 使用运算符:
for ( i in o ) {
    t = { 
        m: o[i], 
        i: i 
    };
    m = m.m < t.m ? t : m;
}
在此循环之后 m等于:
m = { 
    i: "1", 
    m: "5"
};
并且可以使用以下方法捕获最大值:
o[m];
女巫给你:
5

演示
http://jsbin.com/utiqey/
var a = [1, 2, 3, 4, 4, 5, 1, 2, 3, 1, 2, 1, 1]; 

var o = {}, 
    i = 0, 
    m = {m:0,t:null}, 
    t,
    len = a.length; 

for ( ; i < len ; i++ ) { 
    o[ a[i] ] = ( o[ a[i] ] || 0 ) + 1; 
} 


for ( i in o ) { 
    t = { 
        m: o[i], 
        i: i 
    };
    m = m.m < t.m ? t : m;
} 

alert(m.i + " is the highest presented " + m.m + " times"); 

关于javascript - 如何使用 JavaScript 找到出现次数最多的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061594/

相关文章:

javascript - Leaflet.js 中未显示自定义 Mapbox 瓦片集

javascript - 是否可以保留自定义元素的内部 html?

javascript - 如何从 JavaScript 中同一对象中的另一个方法调用方法?

java - 日历。经常发生的事件。如何检查开始日期是否与模式匹配?

java - 如何在List/ArrayList中查找出现

java - RFC5545。同时计算 RRULE 和 EXDATE (EXRULE) 的事件发生

javascript - myFunc.prototype 与 new myFunc().prototype 之间的区别

c - 计算C中一个整数中特定数字的出现

mysql - MySQL-计数并按返回零分组

sql - 将计算并增加该记录的重复实例数的查询