谁能用以下普通语言解释一下累加器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;
  }, []);
}


这种缩减方法可用于解决FreeCodeCamp的“清单更新”分配,作为其高级算法脚本课程的一部分。

链接:https://www.freecodecamp.org/challenges/inventory-update
需要使用“新交货”阵列中的新项目更新库存阵列(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减少方法的出色文章(例如this post和egghead.io上的精彩视频课程),并以某种方式感觉到它令人讨厌的力量之后,我将阅读以下方法:

“通过首先创建一个空数组[](初始值),然后应用以下回调函数来减少库存数组:
如果库存数组当前不为空(长度大于零),并且当前处理的项目名称(curr的索引0可以显示为“保龄球”)与正在更新的库存数组的最后一项相同,然后更新库存数组中该项目的数量。
最后一项是在if语句的上方定义的,如下所示:取到目前为止的累积数组的当前长度,减去1,然后使用此值对累积数组进行索引。然后将该索引处的元素分配给变量“ last”。
另一方面,如果库存为空,则完全添加新物料,即:物料名称和数量。
现在返回新累积的数组。”

如何使用累加器的长度-1来使acc实际累加?
(请原谅)

我想我了解这种reduce方法的大部分构建方式,但请注意,无论我在哪里读错,都应纠正此错误,除非特别说明
使用acc.length-1。

干杯k。

最佳答案

实际的解决方案包括对两个数组进行串联和排序,然后再对它们进行归约。
在这种情况下,每当我们评估一个新项目时,如果它的名称不等于最后一个累加器项目,则意味着它是一个新项目。

使用您的示例,我们要减少的列表是:

[
  [ 21, 'Bowling Ball' ],
  [ 67, 'Bowling Ball' ],
  [ 2, 'Dirty Sock' ],
  [ 1, 'Hair Pin' ],
  [ 2, 'Hair Pin' ],
  [ 3, 'Half-Eaten Apple' ],
  [ 5, 'Microphone' ],
  [ 7, 'Toothpaste' ]
]


因此,当我们遇到第二个项目时,累加器中的最后一个值是[21, 'Boweling Ball'],当我们比较字符串时,我们进入第一个条件。

关于javascript - Javascript减少累加器说明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45695778/

10-09 08:49