Javascript 如何计算数组中以最大数字开头的项目数?

Javascript 如何计算数组中以最大数字开头的项目数?,javascript,jquery,arrays,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*jan

我有一个充满日期的数组。它们都是从一年中的数字开始的。 如何计算数组中以最大数字开头的项目数

有关我的阵列:

 ["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。这些数字是动态的,因此未来最高数字将有所不同


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

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

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

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

通过数组的第一个循环,拆分字符串并查找最大的元素,方法是查看新数组的第一个元素,如下所示:

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

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

您可以尝试以下操作:

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;
var maxCount=0;
var maxVal=null;
var curVal=null;
对于(变量ctr=0;ctr最大值| |最大值===null){
maxVal=曲线;
最大计数=1;
}
else if(曲线===maxVal){
maxCount++;
}
}
console.log(“count=”+maxCount;

您可以尝试以下方法:

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;
var maxCount=0;
var maxVal=null;
var curVal=null;
对于(变量ctr=0;ctr最大值| |最大值===null){
maxVal=曲线;
最大计数=1;
}
else if(曲线===maxVal){
maxCount++;
}
}
console.log(“count=”+maxCount;

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

list.sort();
如果确定数组已排序,则可以省略此步骤

获取最大值

var max = list[list.length-1].substr(0,2);
现在像这样过滤数组

var list2 = list.filter(function(a){
    return max == a.substr(0,2);
})
现在获取列表2中的元素数

var answer = list2.length;

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

list.sort();
如果确定数组已排序,则可以省略此步骤

获取最大值

var max = list[list.length-1].substr(0,2);
现在像这样过滤数组

var list2 = list.filter(function(a){
    return max == a.substr(0,2);
})
现在获取列表2中的元素数

var answer = list2.length;

如果您的数据存储在
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


注意:在示例数组中,有7个以14开头的元素。

如果数据存储在
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


另外,在您的示例数组中有7个以14开头的元素。

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

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

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

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

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;
}

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;
}

有没有可能更改数据?这种存储结构非常混乱,如果可能的话,我建议在深入研究解决方案进行处理之前,先将其存储得更好,可能是
[[12,“a”,Jan“],[14,“D”,“Apr”]]
@briansol不幸的是,数据是这样传递的。您有没有可能更改数据?这种存储结构非常混乱,如果可能的话,我建议在深入研究解决方案进行处理之前,先将其存储得更好,可能是
[[12,“a”,Jan“],[14,“D”,“Apr”]]
@briansol不幸的是,数据是这样传递的。我注意到当我测试你的代码时:D.完美的小代码段。谢谢。我喜欢所有答案的多样性=)我注意到当我测试你的代码时:D.完美的小代码段。谢谢。我喜欢所有答案的多样性=)这仅在保证数字有2位数字时有效。或者您可以使用
parseInt
而不是
substr
这仅在保证数字有2位数字时有效。或者您可以使用
parseInt
而不是
substr