Ich brauche eine Hand, um den Wert von Array Elementen mit den vorherigen Elementen zu summieren und ein neues Array zurückzugeben.

Also wenn wir haben:

let durations = [4, 3.5, 6];

Dann ist im neuen Array das erste Element 4, das zweite Element wäre die Summe von 4 + 3.5 und das dritte sei 4 + 3.5 + 6; Das gewünschte Ergebnis wäre also [4, 7.5, 13.5]

Bisher scheint es, dass eine unerwartete Reduzierung nur die Zahlen zusammenfasst und eine Reihe von Zeichenfolgen zurückgibt !!!

let durations = [4, 3.5, 6];
let arr = [];

let durationsNew = durations.reduce((a, b) => {
    arr.push(a + b);
    return arr;
}, []);

console.log(durationsNew); // The desired result is [4, 7.5, 13.5]
1
foxer 23 Feb. 2020 im 21:55

3 Antworten

Beste Antwort

In Ihrem Code nehmen Sie den Akkumulator a und fügen den Wert hinzu. Der Akkumulator ist ein Array und wird mithilfe eines Plus-Operators in einen String konvertiert.


Stattdessen können Sie eine Variable für die Summe verwenden und die Summe zuordnen, indem Sie den Wert für jedes Element hinzufügen.

let durations = [4, 3.5, 6],
    sum = 0,
    array = durations.map(value => sum += value)

console.log(array); // [4, 7.5, 13.5]
4
Nina Scholz 23 Feb. 2020 im 18:57

Wenn Sie Reduzieren verwenden möchten, müssen Sie Folgendes tun:

let durations = [4, 3.5, 6]

let durationsNew = durations.reduce((_durationsNew, duration, durationIndex) => {
    if(durationIndex > 0) {
      _durationsNew.push(_durationsNew[durationIndex - 1] + duration)
    } else {
      _durationsNew.push(duration)
    }
    return _durationsNew;
}, [])

console.log(durationsNew); // The desired result is [4, 7.5, 13.5]

Beispiel: https://repl.it/repls/HandsomeVacantRate
Benchmark-Test mit Array.map, Array.reduce und for-Schleife: Benchmark-Test withi Array.map, Array.reduce und for loop.

1
Miaplacidus 23 Feb. 2020 im 19:13

Versuchen Sie dies - eine Mischung aus map() und reduce():

[4, 3.5, 6].map((num, i, arr) =>
    num + arr.slice(0, i).reduce((a, b) =>
        a + b, 0)); //[4, 7.5, 13.5]

Die Idee ist, das Array einem neuen Array zuzuordnen. Für jede Nummer ist die zurückgegebene neue Nummer die Nummer + die Summe der Array-Werte bis zu dieser Nummer.

1
Utkanos 23 Feb. 2020 im 19:04