Das Verfahren, um wieder Array#reduce ist, Sie geben ihm eine Akkumulator-Funktion und einen optionalen Startwert und es gilt sie für jedes Element, bis er den Endwert bekommt:
var test = [{"a":1, "b":2, "c":3}, {"a":4, "b":5, "c":6},{"a":7, "b":8, "c":9}];
test
.map(function pluckB(o) { return o.b }) // Take only the 'b' property
// => [2,5,8]
.reduce(function add(a, b) { return a + b }, 0); // Sum them, starting from 0
// => 15
es kann mit ES2015 noch knapperer bekommen arrow functions:
test.map(o => o.b).reduce((a, b) => a + b, 0)
Und mit einer funktionalen Nutzen Bibliothek wie Ramda, es ist nur ein Aufruf von zwei Funktionen:
R.sum(R.pluck('b', test))
Als @ibrahim mahrir kann bei in den Kommentaren andeuten wollte, in JavaScript es kann leistungsfähiger sein, um tatsächlich zu komponieren solche Operationen zusammen und nur durch das Array einmal durchlaufen anstelle von einem Pipeline-Stil. Das liegt daran, .map
, .filter
und co. Erstellen Sie neue Array-Kopien, anstatt das Array an Ort und Stelle zu ändern, und diese Instanziierung hat ihre Kosten.
Wenn dieser Code jedoch nicht in einer sehr engen Schleife läuft, ist die Auswirkung auf die Leistung im Vergleich zur erhöhten Wartbarkeit der Verwendung der lesbarsten Lösung absolut vernachlässigbar.
Was meinst du mit _object b_? Objekt.b? oder das zweite Objekt? –