通过从头创建一个来了解Reduce函数如何在JavaScript中工作

时间:2017-06-22 16:25:16

标签: javascript

这在通过简单的添加功能时似乎运行良好:

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

任何帮助将不胜感激。

0 个答案:

没有答案