javascript - .Reduce 无需累加器

标签 javascript iterator underscore.js reduce

在这方面遇到很多麻烦,以至于我迫切希望朝正确的方向插入。

尝试通过编写一个reduce函数来完成一个常见的Underbar(基本上是Underscore)练习。它必须满足四项测试:

  1. 应该能够对数组求和
  2. 如果没有给出,应使用第一个元素作为累加器
  3. 当给定累加器时,应该在第一个元素上使用迭代器
  4. 将第一个元素用作累加器时不应调用迭代器

这向我表明有两种基本情况:

  1. 给出了一个累加器,使得累加器 != 未定义,此时您可以使用 .each 来满足测试 1 和 3,因为您将遍历所有值,从 (accumulator, collection[0]) 开始,然后 (集合[0], 集合[1]),依此类推。或者这就是我的想法;我可能还差得很远。

    if (accumulator != undefined) {
      _.each(collection, function(value) {
        accumulator = iterator(accumulator, value);
      });
    }
    return accumulator; 
    
  2. 测试 2 和 4 仍然失败,因为没有给出累加器,此时我迷路了。我认为 .each 不能使用。基本上我必须告诉它从 collection[0] 开始并迭代其余部分,但我完全迷失了。我对编码还很陌生,其中很多内容还没有完全理解。

非常感谢您提供的任何帮助。如果我对这些功能如何工作的想法是错误的,也请随时纠正。我只是在寻求帮助。

最佳答案

下面的代码应该完成这项工作。

Array.prototype.reduce = function(callback, accumulator){
	var needsAccum = arguments.length <2;
	if (this.length === 0){
		return this;
	}
	this.forEach(function(item){
		if (needsAccum){
			accumulator = item;
			needsAccum = false;
		}
		else{
			accumulator = callback(accumulator, item)
		}
	})
	return accumulator;
}

关于javascript - .Reduce 无需累加器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358258/

相关文章:

javascript - 优化 IE6 的字符串代码

javascript - 评分小部件未显示在 ajax 调用中

javascript - Wordpress自定义表单输入检查

python - 如何创建python迭代器的副本?

C++:将 vector 中的项目存储到 map 中

javascript - 将初始数据加载到主干应用程序的最佳实践?

javascript - 模板中的 _underscore 循环

javascript - 基于日期的 Angular ui-grid 过滤为空或不为空

C++ 从 regex_iterator 获取匹配项

javascript - 使用值数组过滤多个属性的值