【发布时间】:2021-09-22 07:41:06
【问题描述】:
在下面的示例中,我们可以通过numbers 和arr 访问数组。使用内部变量arr 似乎更符合函数式编程,但是我们应该使用它而不是外部变量的明确原因是什么,因为numbers 和arr 都是指向相同数组值的指针无论如何。
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, m, index, arr) => {
console.log(`acc=${acc}, m=${m}, index=${index}, arr=${arr}`);
console.log(`acc=${acc}, m=${m}, index=${index}, numbers=${numbers}`);
return acc += m;
}, 100);
console.log(sum);
【问题讨论】:
-
想象
array.filter(.....).map(.....)...在地图中,您想做一些涉及“过滤”数组的事情...您不能使用array -
它是回调的抽象和可重用性的更高形式。
-
想象一下
function foo(acc, m, index, arr) { ... },numbers.reduce(foo)... -
@deceze 另一个例子
function isUnique(x, index, arr) { /* ... */ }然后用作arr.map(/* ... */).filter(isUnique) -
在 FP 中 reduce 被称为折叠,它只能访问累加器和当前值:
foldr :: (a -> b -> b) -> b -> [a] -> b。但有时您需要一种更通用的机制来折叠复合值,幸运的是 FP 中还有其他递归方案:para :: (a -> [a] -> b -> b) -> b -> [a] -> b。我猜想通过它的两个附加参数减少实现相同目标的尝试。
标签: javascript functional-programming reduce