地图和减少的主要区别
2022-08-30 04:55:17
我使用了这两种方法,但我对这两种方法的用法感到非常困惑。
是什么可以做但不能做,反之亦然?map
reduce
注意:我知道如何使用这两种方法,我质疑这些方法之间的主要区别以及何时需要使用。
我使用了这两种方法,但我对这两种方法的用法感到非常困惑。
是什么可以做但不能做,反之亦然?map
reduce
注意:我知道如何使用这两种方法,我质疑这些方法之间的主要区别以及何时需要使用。
两者都具有作为输入的数组和您定义的函数。它们在某种程度上是互补的:不能为多个元素的数组返回一个元素,而将始终返回您最终更改的累加器。map
reduce
map
reduce
map
使用迭代元素,并为每个元素返回所需的元素。map
例如,如果您有一个数字数组并希望获取它们的平方,则可以执行以下操作:
// A function which calculates the square
const square = x => x * x
// Use `map` to get the square of each number
console.log([1, 2, 3, 4, 5].map(square))
reduce
使用数组作为输入,您可以根据回调函数(第一个参数)获得一个单个元素(假设一个对象,或一个数字,或另一个数组),该函数获取 and 参数:accumulator
current_element
const numbers = [1, 2, 3, 4, 5]
// Calculate the sum
console.log(numbers.reduce(function (acc, current) {
return acc + current
}, 0)) // < Start with 0
// Calculate the product
console.log(numbers.reduce(function (acc, current) {
return acc * current
}, 1)) // < Start with 1
当您可以对两者做同样的事情时,您应该选择哪一个?试着想象一下代码的样子。对于提供的示例,您可以使用以下命令计算正方形数组,如您所提到的:reduce
// Using reduce
[1, 2, 3, 4, 5].reduce(function (acc, current) {
acc.push(current*current);
return acc;
}, [])
// Using map
[1, 2, 3, 4, 5].map(x => x * x)
现在,看看这些,显然第二个实现看起来更好,而且更短。通常你会选择更干净的解决方案,在这种情况下是 。当然,您可以使用 来完成,但简而言之,请考虑哪个会更短,最终会更好。map
reduce