1. ホーム
  2. javascript

[解決済み] mapとreduceの主な違い

2022-10-19 11:26:36

質問

両方のメソッドを使いましたが、使い方がよくわかりません。

何か map ができることですが reduce はできない、逆は?

注:私は両方のメソッドの使用方法を知っていますが、これらのメソッドの主な違いと使用する必要がある場合について質問しています。

どのように解決するのですか?

<ブロッククオート

ソース

両方 mapreduce は,入力として配列と定義した関数を持っています。これらはある意味で相補的である。 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

配列を入力として使用すると、コールバック関数(第一引数)をもとに、一つの要素(例えばオブジェクト、数値、あるいは別の配列)を取得することができます。 accumulatorcurrent_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)

さて、これらを見ると、明らかに2番目の実装の方が見栄えが良く、短くなっています。通常、よりクリーンな解決策を選びますが、この場合は map . もちろん reduce でもよいのですが、要するに、どちらが短いか、結局はどちらがよいかを考えてみてください。