如何计算以最高编号开头的数组中的项目数?

时间:2014-09-03 14:35:44

标签: javascript jquery arrays

我有一个充满日期的数组。它们每个都以年份数开头。 如何计算数组中以最高数字开头的项目数?

我的阵列有问题:

 ["12-A*januari", "12-B*februari", "12-C*maart", "12-D*april", "12-E*mei", "12-F*juni", "12-G*juli", "12-H*augustus", "12-I*september", "12-J*oktober", "12-K*november", "12-L*december", "13-A*januari", "13-B*februari", "13-C*maart", "13-D*april", "13-E*mei", "13-F*juni", "13-G*juli", "13-H*augustus", "13-I*september", "13-J*oktober", "13-K*november", "13-L*december", "14-A*januari", "14-B*februari", "14-C*maart", "14-D*april", "14-E*mei", "14-F*juni", "14-G*juli"]

所以在这个例子中,我想计算数组中以14开头的项目数,在本例中为7。这些数字是动态的,所以将来最高的数字会有所不同。

如何返回以最高数字开头的项目的计数?

6 个答案:

答案 0 :(得分:3)

如果您的数据存储在arr

var numbers = arr.map(function(x){ return parseInt(x); })
var max = Math.max.apply(Math,numbers)
var n = numbers.filter(function(x){ return x==max; }).length

然后,您的计数将在n

P.S。在您的示例数组中,有7个以14开头的元素。

答案 1 :(得分:2)

你可以对数组进行排序,反转它,然后只需过滤即可获得计数

var count = ar.sort().reverse().filter(function(v){    
    return v.split('-')[0] == ar[0].split('-')[0];
}).length;

FIDDLE

答案 2 :(得分:1)

首先遍历你的数组,通过查看新数组的第一个元素来分割你的字符串并找到最大的元素,如下所示:

var splitString = iteratingString.split("-");
if(Number(splitString[0]) > max){
    max = Number(splitString[0]);
}

然后再次迭代,将每个字符串再次拆分为临时数组,如果临时数组的第一个元素等于max,则增加计数器。

答案 3 :(得分:1)

map / max / filter的组合很优雅,但除非这些函数是惰性的,否则理论上效率非常低,因为你必须在每个函数操作的输入上循环多次。

在实践中这无关紧要,除非你的输入非常大,但为什么不能像下面这样的标准呢?

highestNumberOccurenceFrom(['13a', '12b', '13c']); //2

function highestNumberOccurenceFrom(arr) {
    var count = 0, max = 0, i = arr.length, num;

    while (i) {
        num = parseInt(arr[--i]);

        if (num > max) max = num, count = 1;
        else if (num === max) ++count;
    }

    return count;
}

答案 4 :(得分:0)

您可以尝试这样的事情:

var maxCount = 0;
var maxVal = null;
var curVal = null;

for (var ctr=0; ctr< array.length; ctr++){
    //TODO: parse the number from the beginning of the string 
    //      You will need to write the function 'parseValFromString'
    curVal = parseValFromString(array[ctr]);
    if (curVal > maxVal || maxVal === null){
         maxVal = curVal;
         maxCount = 1;
    }
    else if (curVal ===  maxVal){
         maxCount++;
    }
}
console.log("count=" + maxCount;

答案 5 :(得分:-1)

首先对数组进行排序。让数组的名称为list

list.sort();

如果您确定数组已经排序,则可以省略此步骤。

获取最大数量

var max = list[list.length-1].substr(0,2);

现在像这样过滤数组。

var list2 = list.filter(function(a){
    return max == a.substr(0,2);
})

现在获取list2中的元素数量。

var answer = list2.length;