如何使用JavaScript查找最多出现次数的数字?

如何使用JavaScript查找最多出现次数的数字?,javascript,count,find-occurrences,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

如果一个用户输入了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");
var n=parseInt(提示(“您想输入多少数字?”,“”);
var num=新数组();
对于(i=1;i

var g=[4,4,7,7,4,5,6,7,8,6,5,2,2,2,3,4,5];//您的数组
var t={};//对象,其中包含作为属性的数字。
对于(变量i=0;imax)max=t[i];//检查属性值是否大于当前最大值。
文件。写(i+“”+t[i]+“
”; } 文件写入(t[max]);
p、 如果大于max,则应迭代。

创建一个包含大量数字的
a
,使用:

使用创建普通对象
o

使用a循环遍历数组
a
,并递增计数器。计数器存储在对象
o
上的哈希映射中
(o[a[i]| | 0)
是键的第一次出现所必需的:当未找到该键时,将使用值
0
,而不是
未定义的
。另请参阅

然后使用a循环通过
o
,并找到显示的最大时间。
在循环的底部,使用运算符:

for ( i in o ) {
    t = { 
        m: o[i], 
        i: i 
    };
    m = m.m < t.m ? t : m;
}
最大值可通过以下方式获取:

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.长度;
对于(;i
无需进行两次传递,以下累积最大值:

var g = [4, 4, 7, 7, 4, 5, 6, 7, 8, 6, 5, 2, 2, 2, 3, 4, 5]; //your array

for (var t = {}, maxn = g[0], max = 0, gi, i = g.length; i--;) {
  if (max < (t[gi = g[i]] = (t[gi] || 0) + 1)) {
    max = t[gi];
    maxn = gi;
  }
}

document.write ('The number ' + maxn + ' occurs ' + max + 'times');
var g=[4,4,7,7,4,5,6,7,8,6,5,2,2,2,3,4,5];//您的数组
对于(var t={},maxn=g[0],max=0,gi,i=g.length;i--;){
如果(最大值<(t[gi=g[i]=(t[gi]|0)+1)){
max=t[gi];
maxn=gi;
}
}
document.write('数字'+maxn+'出现'+max+'次');
编辑 这是一个很好的解决方案,但OP可能需要一些解释和更合适的变量名。集合中最常见的值是mode

//使用g的任何成员为模式设定种子
var模式=g[0];
//当前模式发生的次数
var计数=0;
//结果对象
var t={};
var i=g.长度;
var gi;
//循环遍历所有成员
而(我--){
//在i处获取值
gi=g[i];
//跟踪找到该值的次数
//如果该数字以前从未出现过,请将其与计数1相加
//否则,将其计数加1
t[gi]=(t[gi]| 0)+1;
//如果发生,将模式设置为当前值
//比当前模式更频繁
如果(计数

如果存在多个模式,则从阵列末尾开始的第一个找到的计数次数将获胜。

对阵列排序,然后相同的值彼此相邻,这样您就可以在它们之间循环并查找最长的条纹:

arr.sort();

var maxValue, maxCount = 0, cnt = 1, last = arr[0];
for (var i = 1; i <= arr.length; i++) {
  if (i = arr.length || arr[i] != last) {
    if (cnt > maxCount) {
      maxCount = cnt;
      maxValue = last;
    }
    cnt = 1;
    if (i < arr.length) last = arr[i];
  } else {
    cnt++;
  }
}
arr.sort();
var maxValue,maxCount=0,cnt=1,last=arr[0];
对于(变量i=1;i最大计数){
最大计数=cnt;
最大值=最后一个;
}
cnt=1;
如果(i
为了省去其他答案中的一个,一旦你形成了你的值对象,你可以将值推到一个数组中,并使用它来获得上界。通常
Math.max
接受一系列数字,但如果你使用它,也可以接受
数组
。这与
Math.min
类似

var o = { 1: 5, 2: 3, 3: 2, 4: 2, 5: 1 };

var out = [];
for (var k in o) {
  out.push(o[k]);
}

var upperbound = Math.max.apply(null, out); // 5

家庭作业?如果是的话,你应该给它贴上这样的标签,这样我们才能正确回答。如果不是的话,你必须解释为什么你要做一些通常只在家庭作业中完成的事情。@Guffa我最近开始学习JavaScript…使用基本的例子,我把这段代码弄得很复杂,不知道是否有简单的方法可以做到这一点s、 @SergioTulentsev抱歉!我现在编辑了。提示:使用数组文本,
[]
而不是
new array()
来构造数组。第一个数组更短,并且永远不会给出意外的结果。另外:永远不要忘记声明变量(使用
var
)。在您的代码中,变量
i
j
已定义,但未声明。有关数组的详细信息,请参阅。有人说不需要声明i和j。谢谢,我下次将声明它。此外,我将使用[]而不是新数组()。一些解释会很好,因为OP明确表示他是一个新手。例如,
{}
是什么意思,它的目的是什么?我编辑了你的答案,以包括对相关来源的引用。我建议更新答案,使其不那么复杂。@Andreas Al,你从哪里得到的解决方案:)“?@RoyiNamir我自己写的:)?@AndreasAL我不知道……看来你拿走了myne并添加了一些东西。”。你的逻辑是我的解决方案的1:1…在你之前发布的…你确定
如果(i=arr.length | |…
?@RobG:是的。循环运行到数组中最后一个项目之外的一个项目,以便它将最后一个条纹与迄今为止最长的条纹进行比较。否则,您也需要在循环后重复检查。Thnaks RobG,现在OT既有学习版,也有生产版
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"); 
var g = [4, 4, 7, 7, 4, 5, 6, 7, 8, 6, 5, 2, 2, 2, 3, 4, 5]; //your array

for (var t = {}, maxn = g[0], max = 0, gi, i = g.length; i--;) {
  if (max < (t[gi = g[i]] = (t[gi] || 0) + 1)) {
    max = t[gi];
    maxn = gi;
  }
}

document.write ('The number ' + maxn + ' occurs ' + max + 'times');
// Use any member of g to seed the mode
var mode = g[0];
// The number of times the current mode has occurred
var count = 0;
// Results object
var t = {};
var i = g.length;
var gi;

// Loop over all the members
while (i--) {

  // Get the value at i
  gi = g[i];

  // Keep track of how many times the value has been found  
  // If the number hasn't occured before, add it with count 1
  // Otherwise, add 1 to its count
  t[gi] = (t[gi] || 0) + 1;

  // Set the mode to the current value if it has occurred 
  // more often than the current mode
  if (count < t[gi]) {
    count = t[gi];
    mode = gi;
  }
}

alert('The mode is ' + mode + ' and occurs ' + count + ' times.');
arr.sort();

var maxValue, maxCount = 0, cnt = 1, last = arr[0];
for (var i = 1; i <= arr.length; i++) {
  if (i = arr.length || arr[i] != last) {
    if (cnt > maxCount) {
      maxCount = cnt;
      maxValue = last;
    }
    cnt = 1;
    if (i < arr.length) last = arr[i];
  } else {
    cnt++;
  }
}
var o = { 1: 5, 2: 3, 3: 2, 4: 2, 5: 1 };

var out = [];
for (var k in o) {
  out.push(o[k]);
}

var upperbound = Math.max.apply(null, out); // 5