Friday, May 17, 2024
 Popular · Latest · Hot · Upcoming
53
rated 0 times [  54] [ 1]  / answers: 1 / hits: 31434  / 8 Years ago, wed, january 27, 2016, 12:00:00

This problem has been bugging me for a while now and I can't seem to find an answer in web.



Is it possible to use Array reduce method starting from a certain index?



simple example



var studentGrades = [John Doe, Some School, 6, 7, 8, 7, 9, 9];


If I need to loop over only integers in studentGrades, I can do that with a simple for loop



for(var i = 2; i < studentGrades.length; i++) {
// do stuff here ...
}


But let's say I would need get an average grade which is sum of all integers divided by integers count. If Array contained only integers, then there would be no problem using reduce.



var onlyIntegersArr = [5,2,3,4];
var averageGrade = onlyIntegersArr.reduce(function(a,b){
return a + b;
}) / onlyIntegersArr.length;


However if I know that for whatever reasons I need to skip the first two Array elements and start from index Array[2].



So for example I would apply reduce to studentGrades, but only starting from index studentGrades[2].



Is that possible with reduce?



Thank you for solutions, I like slice approach, but I prefer not using a new method in this case.



e.g.



var average = studentGrades.reduce(function(a,b,i){
return i >= 2 ? a+b : 0;
}) / (studentGrades.length - 2);

More From » arrays

 Answers
126

reduce's 3rd argument is an index, here is the fiddle



var averageGrade = onlyIntegersArr.reduce(function (a, b, c) {
if (c >= 2) {
return a + b;
} else {
return 0;
}
});


if array has more non-numeric items after second index then check this fiddle



var studentGrades = [John Doe, Some School, 6, 7, 8, 7, 9, 9, Some School];
var averageGrade = studentGrades.reduce(function (a, b, c) {
if (c >= 2 && !isNaN(b)) {
return a + b;
} else if (c >= 2) {
return a + 0;
} else {
return 0;
}
})
alert(averageGrade);

[#63545] Sunday, January 24, 2016, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
pranav

Total Points: 693
Total Questions: 119
Total Answers: 119

Location: Greenland
Member since Fri, Jul 31, 2020
4 Years ago
;