这个问题一直困扰着我一段时间,我似乎无法在网上找到答案.
是否可以从某个索引开始使用Array reduce方法?
简单的例子
var studentGrades = ["John Doe","Some School",6,7,8,9,9];
如果我只需要在studentGrades中遍历整数,我可以通过简单的for循环来完成
for(var i = 2; i < studentGrades.length; i++) { // do stuff here ... }
但是,假设我需要得到一个平均等级,它是所有整数除以整数计数的总和.如果Array只包含整数,那么使用reduce就没有问题.
var onlyIntegersArr = [5,2,3,4]; var averageGrade = onlyIntegersArr.reduce(function(a,b){ return a + b; }) / onlyIntegersArr.length;
但是,如果我知道无论出于何种原因我需要跳过前两个数组元素并从索引数组[2]开始.
因此,例如我将reduce应用于studentGrades,但仅从index studentGrades开始[2].
减少可能吗?
谢谢你的解决方案,我喜欢切片方法,但我不喜欢在这种情况下使用新方法.
例如
var average = studentGrades.reduce(function(a,b,i){ return i >= 2 ? a+b : 0; }) / (studentGrades.length - 2);
解决方法
reduce的第三个参数是一个索引,这里是
fiddle
var averageGrade = onlyIntegersArr.reduce(function (a,c) { if (c >= 2) { return a + b; } else { return 0; } });
如果数组在第二个索引后有更多非数字项,则检查此fiddle
var studentGrades = ["John Doe","Some School"]; var averageGrade = studentGrades.reduce(function (a,c) { if (c >= 2 && !isNaN(b)) { return a + b; } else if (c >= 2) { return a + 0; } else { return 0; } }) alert(averageGrade);