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