这在通过简单的添加功能时似乎运行良好:
var add = function(a, b) {
return a + b;
};
function reduce(arr, startingValue, func) {
if (Array.isArray(arr)) {
var result = 0,
l = arr.length,
i = 0;
for (; i < l; i++) {
result += func(arr[i], startingValue);
}
return result;
}
return false;
}
reduce([3, 5, 7], 0, add) // returns 15
但是当我尝试传递一个对数组中的单词进行计数的函数时......
function countWordsInReduce(arr, result) {
var l = arr.length,
i = 0,
j = 0,
index = arr[i],
newarr = [];
for (; i < l; i++) {
index = arr[i].split(' ');
newarr.push(index)
}
function helper(arr) {
var count = 0;
arr.forEach(function(cv) {
if (Array.isArray(cv)) {
helper(cv);
} else {
count++;
}
});
return count;
}
for (; j < newarr.length; j++) {
result += helper(newarr[j])
}
return result;
}
var wordArray = ["hello there this is line 1", "and this is line 2"];
reduce(wordArray, 0, countWordsInReduce) // I get 53
有趣的是,当我单独使用countWordsInReduce
时,它可以工作......
countWordsInReduce(wordArray, 0) //returns 11
任何帮助将不胜感激。