我正在读一篇article here
reduce
combines an array into a single value by repeatedly using a function that combines an element of the array with a base value. This is exactly what sum did, so it can be made shorter by using reduce... except that addition is an operator and not a function in JavaScript, so we first had to put it into a function.
function reduce(combine, base, array) {
forEach(array, function (element) {
base = combine(base, element);
});
return base;
}
function add(a, b) {
return a + b;
}
function sum(numbers) {
return reduce(add, 0, numbers);
}
function countZeroes(array) {
function counter(total, element) {
return total + (element === 0 ? 1 : 0);
}
return reduce(counter, 0, array);
}
reduce
将数组合并为单个值? :这是否意味着所有元素都被求和或连接?- 将数组的元素与基值组合? :组合所有元素还是一个元素?
- 作者想解释什么?有人可以澄清这个概念吗?
最佳答案
reduce 操作的工作原理是迭代数组并向自定义回调提供一个累加器。该回调可以自由地对累加器进行任何它想要的操作。例如,累加器通常是回调添加的数字。因此,一组数字将减少为一个数字。
Array.prototype.reduce
实际上只是对此的抽象:
var acc = 0;
for (var i = 0; i < arr.length; i++) {
acc += arr[i];
}
表示为减少:
var acc = arr.reduce(function (acc, n) {
return acc + n;
});
显然,您不必使用+
,您可以执行其他任何操作,例如:
var acc = [];
for (var i = 0; i < arr.length; i++) {
acc.push(arr[i]);
}
var acc = arr.reduce(function (acc, n) {
acc.push(n);
return acc;
}, []);
结果是原始数组,没有任何内容被“减少”。 (是的,这毫无意义,但展示了你所拥有的自由。)
累加器只是回调在上一次迭代期间返回的值。归约操作的进行如下:
- 回调采用空累加器*和数组的第一个值,返回值
- 回调获取上一次迭代的返回值和数组的第二个值,返回值
- [对数组中的每个元素重复]
reduce
将最后一个回调的结果作为reduce 操作的结果输出
* 有关首次迭代行为的详细信息,请参阅 API 文档。
关于javascript - reduce 将数组合并为单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218872/