通过从头创建Reduce函数,了解Reduce函数在JavaScript中的工作原理
当传递一个简单的add函数时,这似乎工作得很好:通过从头创建Reduce函数,了解Reduce函数在JavaScript中的工作原理,javascript,Javascript,当传递一个简单的add函数时,这似乎工作得很好: 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++) {
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
如果有任何帮助,我们将不胜感激。那么您的问题是什么?在
添加
功能中,b
始终是0
,然后它看起来像是在工作,但该功能添加
没有效果,它只是返回a
。func
的真正目的是什么?为什么不使用本机的数组。reduce
?您的reduce()
与数组的工作方式不同。prototype.reduce
:reduce([3,5,7],5,add)!==[3,5,7].reduce(add,5)
()您的reduce正在进行countWordsInReduce(wordArray[0],0)+countWordsInReduce(wordArray[1],0)),如果您试图对多边形填充进行编码,则实际上是53。
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(wordArray, 0) //returns 11