Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取数组中数字的最大出现次数_Javascript_Algorithm - Fatal编程技术网

Javascript 如何获取数组中数字的最大出现次数

Javascript 如何获取数组中数字的最大出现次数,javascript,algorithm,Javascript,Algorithm,作为一个练习的答案,我必须创建一个函数,给定一个数字数组,返回出现次数最多的数字,如果多个数字出现次数最多,则返回次数。这是我所做的实现,但我正在仔细研究为什么在示例中它返回10而不是9 它似乎认为10

作为一个练习的答案,我必须创建一个函数,给定一个数字数组,返回出现次数最多的数字,如果多个数字出现次数最多,则返回次数。这是我所做的实现,但我正在仔细研究为什么在示例中它返回10而不是9

它似乎认为10<9是正确的。怎么了

函数最大发生次数(arr){
var aux=[],max=0,final=null;
对于(var i=0,t=arr.length;i max)max=aux[arr[i]];
}
用于(辅助系统中的x){
如果(aux[x]==max&&(x
typeof(x)
放在第二个循环中会发现一些变量被转换为type
string
!仍然在调查这到底发生在哪里。你可以替换

if ( aux[x] == max  && (x < final || final == null)) {
if(辅助[x]=max&&(x

if(aux[x]==max&&(parseInt(x)
返回正确的值9

编辑:

非常有趣,我不知道Javascript在for…in循环中精确处理数组。有关更多信息,请参阅以下其他问题:


另外请注意,您可以使用
arr.forEach(function(element){…});
返回的元素的类型是完整的。

我认为问题在于aux中的x不是一个数字,因此if语句计算不正确。当转换为数字时,它返回9(如下)

(3==3&(“10”<“9”| |“9”==null))计算结果为true

函数最大发生次数(arr){
var aux=[],max=0,final=null;
对于(var i=0,t=arr.length;i max)max=aux[arr[i]];
}
用于(辅助系统中的x){
if(aux[x]==max&(parseInt(x)
“我正在仔细研究为什么在示例中它返回10而不是9。”

这是因为在这种比较中,10比9,8,7,6,5,4,3,2小,但比1大一点。 :)

此小类型更正将修复此问题:

function maxOccurences(arr) {
    aux = [], max = 0, final = null;

    for (var i=0,t=arr.length; i<t; i++) {
        aux[arr[i]] = (aux[arr[i]] || 0) + 1;
        if (aux[arr[i]] > max) max = aux[arr[i]];
    }

    for (x in aux) {
        if ( aux[x] == max  && (+x < final || final == null)) {
            final = x;
        }
    }    

    return final;
} 
函数MaxOccurrences(arr){
aux=[],max=0,final=null;
对于(var i=0,t=arr.length;i max)max=aux[arr[i]];
}
用于(辅助系统中的x){
如果(aux[x]==max&(+x
Yes,
for x in y
x
提供的值实际上是键而不是数字。您可以将它们用于
y[x]
,但在不转换其类型的情况下,不能用于其他计算。
function maxOccurences(arr) {
    aux = [], max = 0, final = null;

    for (var i=0,t=arr.length; i<t; i++) {
        aux[arr[i]] = (aux[arr[i]] || 0) + 1;
        if (aux[arr[i]] > max) max = aux[arr[i]];
    }

    for (x in aux) {
        if ( aux[x] == max  && (+x < final || final == null)) {
            final = x;
        }
    }    

    return final;
}