我如何编码_.reduce()?

时间:2016-01-09 23:58:59

标签: javascript underscore.js native-code

我需要在javascript中重新创建_.reduce(),以便

  1. 能够总结数组
  2. 如果给出了
  3. ,则使用第一个元素作为累加器
  4. 在将第一个元素用作累加器时不会调用第一个元素上的迭代器
  5. 在给定累加器时调用第一个元素上的迭代器
  6. 到目前为止,我有一个满足第1和第4要求的功能。然而,我无法获得第二和第三。

    _.reduce = function(collection, iterator, accumulator) {
    if(typeof accumulator === undefined){
      accumulator = collection[0]
    }
    _.each(collection, function(anyItem){
      accumulator = iterator(accumulator, anyItem);
    })
    return accumulator;
    };
    

    我的下一步是什么?如何完成此功能?

2 个答案:

答案 0 :(得分:0)

试试这个:

  _.reduce = function(collection, iterator, accumulator) {
    if (arguments[0] && arguments[1] && arguments.length === 2) {
      accumulator = collection[0];
      collection = collection.slice(1);
    }

    _.each(collection, function(item) {
      accumulator = iterator(accumulator, item);
    });

    return accumulator;
  };

如果您不理解其中的一部分,请问,我会尝试解释。

答案 1 :(得分:0)

我会像这样写

_.reduce = function(collection, iterator, accumulator) {
  if(arguments.length < 3) return _.reduce(collection.slice(1), iterator, collection[0]);
  _.each(collection, item => accumulator = iterator(accumulator, item));

  return accumulator;
};