私は同じ長さの2つの配列を持っているので、私はどうにかそれらを両方とも同時にreduceメソッドで処理したいと思います。ような何か:array.prototype.reduce()を使用して2つの配列を同時に処理できますか?
var arr1 = [2, 3, 4, 5, 6];
var arr2 = [5, 10, 4, 9, 5];
var productSum = arr1.reduce(function(sumOfProducts, item, secondArrayItem) {
/* here I would like to multiply item from arr1 by the item from arr2 at the same index */
return sumOfProducts + item * secondArrayItem;
}, 0, arr2)
console.log(productSum); // 131
オプションはもちろんcurrentIndex
を使用してarr2
から正しい項目にアクセスすることですが、私は、関数のスコープ外の変数にアクセスしていますように、その解決策は醜いです。
具体的な使用例は、var resources = [2, 5, 4, 6, 2]
のようなリソースを持つ配列を持っており、各項目がvar cost = [3, 1, 0, 0, 1]
のような別の配列の対応するリソースコストより高いかどうかをチェックしたいと考えています。
reduce()
機能を使用すると、これに対していくつかの素晴らしい解決策がありますか?
通常は、2つのリストをまとめて圧縮し、次に圧縮したリストを縮小します。しかし、JSのリストをいかにイディオム的に圧縮するかはわかりません。 – Carcigenicate
"*その解決策は、関数の範囲外の変数にアクセスしているので醜いです。*" - 私はそれについて醜いものは見当たりません。グローバルにアクセスしたり、クロージャを使ったりするとき、これを常に行います。重要なことは、変数が一定であることだけです。この解決法について本当に醜いのは、a)対称ではなく(arr1がarr2にアクセスするのとは異なる動作をする)、b)配列の長さが同じであることを保証しなかったため、arr2 [i] 'は有効なインデックスにアクセスします。 – Bergi