通过从头创建Reduce函数,了解Reduce函数在JavaScript中的工作原理

通过从头创建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++) {

当传递一个简单的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++) {
            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