-
Notifications
You must be signed in to change notification settings - Fork 11
/
reduceRight.js
33 lines (29 loc) · 881 Bytes
/
reduceRight.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
define(function () {
/**
* Array reduceRight
* @version 0.5.0 (2012/12/18)
*/
function reduceRight(arr, fn, initVal) {
// check for args.length since initVal might be "undefined" see #gh-57
var hasInit = arguments.length > 2,
result = initVal,
i = arr.length,
val;
if (!i && !hasInit) {
throw new Error('reduce of empty array with no initial value');
}
while (--i >= 0) {
// we iterate over sparse items since there is no way to make it
// work properly on IE 7-8. see #64
val = arr[i];
if (! hasInit) {
result = val;
hasInit = true;
} else {
result = fn(result, val, i, arr);
}
}
return result;
}
return reduceRight;
});