我有一个充满日期的数组。它们每个都以年份数开头。 如何计算数组中以最高数字开头的项目数?
我的阵列有问题:
["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。这些数字是动态的,所以将来最高的数字会有所不同。
如何返回以最高数字开头的项目的计数?
答案 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;
答案 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;