首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从头开始实现reduce(),不确定JS如何知道"array“是什么

从头开始实现reduce(),不确定JS如何知道"array“是什么
EN

Stack Overflow用户
提问于 2019-04-16 10:49:49
回答 1查看 599关注 0票数 0

我正在尝试从头开始实现reduce()。我能够让它工作,但是javascript怎么知道"array“是什么,尽管我从来没有在任何地方定义过它?

代码语言:javascript
复制
function reduce(callback, initialVal) {
  var accumulator = (initialVal === undefined) ? undefined : initialVal;
  for (var i=0; i<array.length; i++) {
    if (accumulator !== undefined) {
      accumulator = callback(accumulator, array[i], i, array);
    } else {
      accumulator = array[i]
    }
  }
  return accumulator;
};

// testing a basic sum
arr = [1,2,3]
arr.reduce( (accumulator, elem) => accumulator+=elem )

编辑:我让它工作了:我把“数组”改成了“这个”,因为我在Array.prototype下创建了一个新方法。

代码语言:javascript
复制
Array.prototype.myReduce = function(callback, initialVal) {
  var accumulator = (initialVal !== undefined) ? initialVal : undefined;
  for (var i=0; i<this.length; i++) {
    if (accumulator !== undefined) {
      accumulator = callback(accumulator, this[i], i, this);
    } else {
      accumulator = this[i]
    }
  }
  return accumulator;
};

arr.myReduce( (accumulator, elem) => accumulator+=elem )
arr.myReduce( (accumulator, elem) => accumulator+=elem , 100)
EN

回答 1

Stack Overflow用户

发布于 2019-04-16 11:04:28

你已经很接近了。似乎缺少的一点是,在函数内部,this将被定义为调用函数的数组。所以你可以在你当前正在使用array的地方使用this,它在你的函数中是未定义的(正如你所怀疑的)。您可能还希望在不同的位置开始循环,这取决于是否传入了初始值。例如:

代码语言:javascript
复制
function reduce(callback, initialVal) {
    var accumulator = ( initialVal === undefined) ? this[0] : initialVal;
    var start = (initialVal === undefined) ? 1 : 0
    for (var i = start; i < this.length; i++) {
        accumulator = callback(accumulator, this[i])
    }
    return accumulator;
  };

Array.prototype.myReduce = reduce

// no init value
console.log([1, 2, 3].myReduce((sum, curr) => sum + curr))

// init value:
console.log([1, 2, 3].myReduce((sum, curr) => sum + curr, 1000))

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55699861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档