如果用户输入 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
演示
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/