382 Stimmen

Wie ruft man reduce auf ein Array von Objekten auf, um deren Eigenschaften zu summieren?

Sagen wir, ich möchte summieren a.x für jedes Element in arr .

arr = [ { x: 1 }, { x: 2 }, { x: 4 } ];
arr.reduce(function(a, b){ return a.x + b.x; }); // => NaN

Ich habe Grund zu der Annahme, dass a.x es undefined zu einem bestimmten Zeitpunkt.

Das Folgende funktioniert gut

arr = [ 1, 2, 4 ];
arr.reduce(function(a, b){ return a + b; }); // => 7

Was mache ich im ersten Beispiel falsch?

2voto

Cedrick Campoto Punkte 101

Ich verwendet, um diese Begegnung ist meine Entwicklung, was ich tun, ist wrap meine Lösung in einer Funktion, um es wiederverwendbar in meiner Umgebung, wie diese:

const sumArrayOfObject =(array, prop)=>array.reduce((sum, n)=>{return sum + n[prop]}, 0)

2voto

user1503606 Punkte 3401

Nur meine 2 Cents zum Festlegen eines Standardwerts mit Objektliteral.

  let arr = [{
        duration: 1
    }, {
        duration: 3
    }, {
        duration: 5
    }, {
        duration: 6
    }];

    const out = arr.reduce((a, b) => {
        return {
            duration: a.duration + b.duration
        };
    }, {
        duration: 0
    });

    console.log(out);

1voto

let temp =[{x:1},
{x:2},
{x:3},
{x:4}];
let sum = temp.map(element => element.x).reduce((a, b) => a+ b , 0)
console.log(sum);

können wir auf diese Weise für die Summe von x

Leistung : 10

0voto

Gizem Deniz Punkte 1

Wenn Sie die 0 (Null) in 1 oder eine andere Zahl ändern, wird sie zur Gesamtzahl addiert. In diesem Beispiel ist die Gesamtzahl 31, aber wenn wir 0 in 1 ändern, wird die Gesamtzahl 32 sein.

const batteryBatches = [4, 5, 3, 4, 4, 6, 5];

let totalBatteries= batteryBatches.reduce((acc,val) => acc + val ,0)

0voto

Pritesh Mhatre Punkte 3459
function aggregateObjectArrayByProperty(arr, propReader, aggregator, initialValue) {
  const reducer = (a, c) => {
    return aggregator(a, propReader(c));
  };
  return arr.reduce(reducer, initialValue);
}

const data = [{a: 'A', b: 2}, {a: 'A', b: 2}, {a: 'A', b: 3}];

let sum = aggregateObjectArrayByProperty(data, function(x) { return x.b; }, function(x, y) { return x + y; }, 0);
console.log(`Sum = ${sum}`);
console.log(`Average = ${sum / data.length}`);

let product = aggregateObjectArrayByProperty(data, function(x) { return x.b; }, function(x, y) { return x * y; }, 1);
console.log(`Product = ${product}`);

Ich habe gerade einen generisch Funktion aus vorher gegebenen Lösungen. Ich bin ein Java-Entwickler, so entschuldigt für alle Fehler oder Nicht-Javascript-Standards :-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X