Angesichts eines Arrays [1, 2, 3, 4]
Wie kann ich die Summe seiner Elemente finden? (In diesem Fall würde die Summe lauten 10
.)
Ich dachte $.each
könnte nützlich sein, aber ich bin mir nicht sicher, wie man es implementiert.
Angesichts eines Arrays [1, 2, 3, 4]
Wie kann ich die Summe seiner Elemente finden? (In diesem Fall würde die Summe lauten 10
.)
Ich dachte $.each
könnte nützlich sein, aber ich bin mir nicht sicher, wie man es implementiert.
Verwenden Sie eine for
Schleife:
const array = [1, 2, 3, 4];
let result = 0;
for (let i = 0; i < array.length - 1; i++) {
result += array[i];
}
console.log(result); // Should give 10
Oder sogar eine forEach
Schleife:
const array = [1, 2, 3, 4];
let result = 0;
array.forEach(number => {
result += number;
})
console.log(result); // Should give 10
Der Einfachheit halber sollten Sie reduce
:
const array = [10, 20, 30, 40];
const add = (a, b) => a + b
const result = array.reduce(add);
console.log(result); // Should give 100
Ein paar Leute haben vorgeschlagen, eine .sum()
Methode zum Array.prototype
. Dies wird im Allgemeinen als schlechte Praxis angesehen, also schlage ich nicht vor, dass Sie es tun.
Wenn Sie immer noch darauf bestehen, dann ist dies eine prägnante Art, es zu schreiben:
Array.prototype.sum = function() {return [].reduce.call(this, (a,i) => a+i, 0);}
dann: [1,2].sum(); // 3
Beachten Sie, dass die dem Prototyp hinzugefügte Funktion eine Mischung aus ES5- und ES6-Funktions- und Pfeilsyntax verwendet. Die function
wird deklariert, damit die Methode die this
Kontext aus dem Array
mit dem Sie arbeiten. Ich habe die =>
der Kürze halber innerhalb der reduce
anrufen.
Kein Bedarf an initial value
! Denn wenn keine initial value
übergeben wird, wird die callback function
wird nicht auf das erste Element der Liste angewandt, sondern das erste Element wird als initial value
. Sehr c OO l Merkmal :)
[1, 2, 3, 4].reduce((a, x) => a + x) // 10
[1, 2, 3, 4].reduce((a, x) => a * x) // 24
[1, 2, 3, 4].reduce((a, x) => Math.max(a, x)) // 4
[1, 2, 3, 4].reduce((a, x) => Math.min(a, x)) // 1
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.
37 Stimmen
@tereško Unlust zu googeln ist kein gültiger Abschlussgrund auf Stackoverflow. Bitte stimmen Sie ab, wenn Sie das Gefühl haben, dass die Frage nicht gut (re)gesucht ist. (Auch nach den Antworten zu urteilen, scheint dies ein sehr kontroverses Thema mit vielen möglichen Lösungen zu sein, einschließlich einiger sehr hoch bewerteter schlechter Praktiken (eval) - überraschenderweise).
13 Stimmen
Hinweis: Die meisten Antworten hier berechnen im Wesentlichen
a[0] + a[1] + ...
was sich in eine String-Verkettung verwandeln kann, wenn das Array Nicht-Zahlen-Elemente enthält. z.B.['foo', 42].reduce((a,b)=>a+b, 0) === "0foo42"
.4 Stimmen
Kein eingebauter Reducer, den man in Array.reduce einspeisen könnte? Ich dachte an etwas wie
[1,2,3].reduce(Math.sum)
.