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 */

使用 for(;;)-loop 遍历数组 a并增加计数器。计数器存储在对象 o 的 HashMap 中。
第一次出现 key 时需要 (o[a[i]] || 0):当找不到时,使用值 0 而不是 未定义。另见 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
}

然后使用 for(.. in ..)-loop 遍历 o并找出呈现的最大次数。
在循环的底部,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/

相关文章:

iOS-计算并返回数组中重复项的数量

python - 从数据框中提取共现数据

javascript - meteor http 发布到其他域

javascript - Openlayers 根据您的 map 编写并保存 KML

javascript - React 嵌套渲染

javascript - Bootstrap/Rails - 可折叠导航栏在移动设备上不起作用

Python Pandas 不正确的日期计数

php - 如何计算日期范围内的记录及其条件

java - 使用 Collections 或我的函数计算 ArrayList 中对象的出现次数

r - 向 df 添加一列以计算另一列中某个值的出现次数