减少JavaScript中的功能

时间:2017-08-08 01:04:26

标签: javascript arrays object

我正在尝试理解reduce函数的原始代码以及如何使用它。

    var each = function(collection, callback){
        if(Array.isArray(collection)){
            for(var i=0;i<collection.length;i++){
                callback(collection[i]);
            }
        }
        else{
            for(var key in collection){
                callback(collection[key]);
            }
        }
    };

var reduce = function(collection, callback, accumulator){
  each(collection, function(element){
    if(accumulator === undefined) {
      return accumulator = element;
    }else {
      return accumulator = callback(accumulator, element);
    };
});

return accumulator;
};

var sArr = [3, 2, 3, 4, 5];


each(sArr, function(collection){
  console.log(collection);
});

reduce(sArr, function(collection, prev){
  console.log(prev = prev + sArr);
});

在我上面的代码中你可以看到我试图通过将它们全部添加到正常的reduce函数中来将所有数组减少为一个元素,但它不像我想象的那样工作。

有人可以检查我是否做错了,如果你能用外行的话向我解释我的减少功能会逐行地做什么?

抱歉新手。

1 个答案:

答案 0 :(得分:3)

reduce(sArr, function(collection, prev){
  return collection + prev;
});

或等效

reduce(sArr, (collection, prev) => collection + prev);

将返回正确的值。你有什么:

reduce(sArr, function(collection, prev){
  console.log(prev = prev + myArr);
});

会尝试将不存在的值(myArr)添加到当前元素,然后尝试将其分配回本地变量(prev),该变量将在函数末尾被丢弃,然后显示它,最后将undefined返回到累加器,因为你没有return函数。