【发布时间】:2018-01-23 13:07:56
【问题描述】:
谁能用简单的英语解释一下下面的累加器acc结构?
return arr1.reduce(function(acc, curr){
var last = acc[acc.length-1];
if(acc.length > 0 && curr[1]===last[1]) {
last[0] += curr[0];
} else acc.push(curr);
return acc;
}, []);
}
这个reduce 方法可用于解决 FreeCodeCamp 的“库存更新”任务,作为高级算法脚本课程的一部分。
需要使用“新交付”数组中的新商品更新库存数组 (arr1) 中的现有商品。
两个测试数组,一个当前库存curInv和一个新交付newInv,可能如下:
var curInv = [
[21, "Bowling Ball"],
[2, "Dirty Sock"],
[1, "Hair Pin"],
[5, "Microphone"]
];
var newInv = [
[2, "Hair Pin"],
[3, "Half-Eaten Apple"],
[67, "Bowling Ball"],
[7, "Toothpaste"]
];
在找到几篇关于 Javascript reduce 方法的优秀文章(如 this post 和 egghead.io 上的一个很棒的视频课程)后,并以某种方式感知到它正在骚扰的力量,我会阅读以下方法:
减少库存数组,首先创建一个空数组 [ ](初始值),然后应用以下回调函数:
如果库存数组当前不为空(长度大于零),并且当前处理的项目的名称(例如 curr 的索引 0 可以读为“保龄球”)与库存的最后一项相同数组被更新,然后更新库存数组中这个项目的数量。
最后一项定义在 if 语句的正上方,如下:将累加数组的当前长度减去 1,然后使用该值对累加数组进行索引。然后将该索引处的元素分配给变量“last”。
另一方面,如果库存是空的,则完全添加新项目,即:项目名称和数量。 现在返回新累积的数组。"*
如何使用累加器的
length - 1来使 acc 实际累加? (请原谅头韵)
我想我大部分了解这个 reduce 方法是如何构建的,但是请在我误读的地方纠正我),除了这个特别的
使用acc.length-1。
干杯,k。
【问题讨论】:
-
这个reducer是如何解决这个问题的?你能分享一下实际通话吗?
-
@thedude:一种解决方案似乎是将reduce方法与concat结合起来,并按字母顺序排序Repl.it link
标签: javascript for-loop reduce accumulator