在我的任务中,我必须编写一个程序,以找到数组中最频繁的数字以及该数字重复多少次。我写了一些东西,但是只打印出最大的重复时间。所以我的问题是如何打印此元素的值(最大数量)(在我的情况下是4)? :)

var array = ['13', '4', '1', '1', '4', '2', '3', '4', '4', '1', '2', '4', '9', '3'];

function frequentNumber(arr) {
   var result = [],
       result2 = [];

   sorted_arr = arr.sort();

    console.log(sorted_arr);
    n=1;
    buffer = [];

    for (var i = 0; i < sorted_arr.length; i++) {

        if (sorted_arr[i + 1] === sorted_arr[i]) {
            n++;
        }else{

            if(buffer.length != 0 ){
                for(var j = 0; j < buffer.length; j++){

                    if(buffer[j] < n){
                        result = sorted_arr[j] + " is " + n;
                    }
                }
            }else{buffer.push(n)}

            n=1;
        }
    }

//    console.log(Math.max.apply(Math, buffer));
    console.log(buffer);
}

frequentNumber(array);

最佳答案

我认为我对变量名的使用将使它更清晰,而无需过多评论。

var array = ['13', '4', '1', '1', '4', '2', '3', '4', '4', '1', '2', '4', '9', '3'];
var mostUsed;
var currentNumber;
var lastNumber;
var currentCount;
var lastCount;
function frequentNumber(arr) {
array.sort();
var y = 1;
var tempArr = [];
    for (x = 0; x < array.length; x++){
        if(array[x] == array[y]){
            tempArr.push(array[x]);
            currentNumber = array[x];
        }
        else{
            tempArr.push(array[x]);
            currentNumber = array[x];
            currentCount = tempArr.length;
            //console.log(currentNumber +' occurs ' + currentCount + ' times');
            tempArr =[];
            if (lastCount >= currentCount){
                mostUsed = lastNumber;
            }
            else{
                mostUsed = currentNumber
            }
            lastCount = currentCount;
            lastNumber = currentNumber;


        }


       y++;
    }
    console.log('Most Used Number is = ' +mostUsed);
}
frequentNumber(array);

最终发生的事情是,在对数组进行排序之后,您检查第一个点(0)是否与第二个点(1)相匹配,是否将其推入仅用于计数目的的临时数组中。当您最终找到一个不匹配的项目时,它仍然将其推入数组,但是获得该数组的总长度并将其存储为currentCount和正在使用的数字作为currentNumber。

然后在这些变量上运行另一个条件。在所有循环的第一次迭代中,无需检查任何内容,因为arecurrentNumber是最常用的数字,因为它与没有进行比较。这样,第一个数字就会塞入我们将用作mostUsed变量的内容中。之后,我们将当前数据存储到称为lastNumber和lastCount的其他变量中。然后在此之后的每个循环中,将当前计数与最后一个计数进行比较。如果lastCount较高,则将lastNumber存储为最常用的,并且不进行任何更改。但是,如果currentNumber较高,它将存储为最常用的数字。

这有意义吗?如果您不遵循逻辑,则应在代码的各个位置添加注释,以便更好地理解它。这是您老师进行的很好但有趣的编码测试。我喜欢用最简单最干净的方式来完成它。

10-04 15:31