Ich habe zwei Arrays von gleicher Länge und ich möchte sie irgendwie beide auf einmal mit der Reduce-Methode verarbeiten. Etwas wie:Kann ich array.prototype.reduce() verwenden, um zwei Arrays gleichzeitig zu verarbeiten?
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
Eine Option wäre natürlich das richtige Element für den Zugriff von arr2
currentIndex
verwenden, aber diese Lösung ist hässlich wie ich eine Variable außerhalb des Bereichs der Funktion zugreifen.
Mein spezifischer Anwendungsfall ist, dass ich ein Array mit Ressourcen wie var resources = [2, 5, 4, 6, 2]
habe, und ich möchte prüfen, ob jedes Element höher ist als entsprechende Ressourcenkosten in einem anderen Array wie var cost = [3, 1, 0, 0, 1]
.
Gibt es eine nette Lösung dafür mit der reduce()
Funktion?
Sie würden dies normalerweise tun, indem Sie die 2 Listen zusammen zippen und dann die gezippte Liste reduzieren. Ich weiß nicht, wie man Listen in JS idiomatisch zippen kann. – Carcigenicate
"* Diese Lösung ist hässlich, da ich auf eine Variable außerhalb des Bereichs der Funktion zugreife." "Ich sehe nicht, was hässlich ist, wir tun dies die ganze Zeit, wenn wir auf Globals zugreifen oder Schließungen verwenden. Wichtig ist nur, dass die Variable konstant ist. Was wirklich hässlich an dieser Lösung ist, ist a) es ist nicht symmetrisch (der Zugriff auf arr1 funktioniert anders als der Zugriff auf arr2) und b) wir haben nicht sichergestellt, dass die Arrays die gleiche Länge haben, also wissen wir nicht ob arr2 [i] 'greift auf einen gültigen Index zu. – Bergi