1533 Stimmen

So finden Sie die Summe einer Reihe von Zahlen

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.

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) .

7voto

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

6voto

caiohamamura Punkte 1965

ES6 für..von

let total = 0;

for (let value of [1, 2, 3, 4]) {
    total += value; 
}

6voto

Guy Punkte 62474

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.

0 Stimmen

Wenn Sie mit Prototypen herumspielen wollen (und das sollten Sie nicht), ist eine Math.prototype.sum Methode besser geeignet wäre.

5voto

Yas Punkte 4057

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

5voto

user40521 Punkte 1758
var totally = eval(arr.join('+'))

Auf diese Weise können Sie alle möglichen exotischen Dinge in das Feld einfügen.

var arr = ['(1/3)','Date.now()','foo','bar()',1,2,3,4]

Das ist nur ein halber Scherz.

31 Stimmen

Ich lache halb.

0 Stimmen

eval(['alert("removing your computer")',2,3].join("+"))

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