【发布时间】:2021-07-15 05:41:41
【问题描述】:
这是我第一次在这里写,所以提前道歉。
我很确定我对 reduce() 方法有很好的掌握,但我似乎无法特别理解一个概念。在这个特定的问题中,我们被要求找到所有数组参数共享的元素。我能够使用 reduce 方法构建答案。我知道它有效,并且我知道有更有效的解决方案,但我似乎无法理解累加器值如何自我修正,即使我没有重新分配它的值。
让我解释一下:在第二个数组的当前值的第一次迭代之后,我检查当前元素是否与我的累加器(第一个数组)共享共性。在检查公共值并将其推送到结果中之后,results = [5, 15, 7]。下一次迭代开始时的累加器值也成为我的一组结果值,但同样,我没有明确地重新分配累加器值,例如 acc = results 。累加器如何在没有显式更改的情况下“理解”更改?我只是按原样接受了这种机制,但希望得到解释。请让我知道我是否应该提供更多说明。谢谢!
function intersection(arrays) {
return arrays.reduce((acc, curr) => {
// here, acc = the first array --> 5, 15, 7 --> 15, 5
let results = []
for(let element of curr) {
if(acc.includes(element)) results.push(element)
}
// here, results = 5, 15, 7 --> 15, 5 --> 15, 5
return results
})
}
const arr1 = [5, 10, 15, 20, 7, 3];
const arr2 = [15, 88, 1, 5, 7, 21];
const arr3 = [1, 10, 15, 5, 20, 21];
console.log(intersection([arr1, arr2, arr3]));
// should log: [5, 15]
【问题讨论】:
-
如果您使用
set会更容易。 -
当你从
reduce返回一些东西时,它将在下一次迭代中变成acc值 -
它正在记录
[15, 5],那么除此之外您还有什么期望? -
@charlietfl,我已阅读文档并将此特定定义解释为与您返回 acc 的情况有关。但是,它适用于任何返回值是有道理的:“您的 reducer 函数的返回值被分配给累加器,其值在整个数组的每次迭代中都会被记住,并最终成为最终的单一结果值。”
标签: javascript reduce