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.
Ist jemand wie ich auf der Suche nach einem funktionalen Oneliner?
Angenommen:
const arr = [1, 2, 3, 4];
Hier ist der Oneliner für modernes JS:
sum = arr.reduce((a, b) => a + b, 0);
(Falls Sie zufällig den alten IE ohne Pfeilfunktionen unterstützen müssen:)
sum = arr.reduce(function (a, b) {return a + b;}, 0);
Beachten Sie, dass 0 ist hier der Ausgangswert, den Sie bei Bedarf als Offset verwenden können. Beachten Sie auch, dass dieser Anfangswert benötigt wird, da sonst der Aufruf der Funktion mit einem leeren Array zu einem Fehler führt.
Wenn Sie Lodash verwenden, können Sie die Summe Funktion
array = [1, 2, 3, 4];
sum = _.sum(array); // sum == 10
Was ist mit diesen Antworten? Er hat Lodash nicht markiert, und es gibt viele bessere Antworten oben. Darüber hinaus ist dies eine Art von sagen "Wenn Sie zufällig Python verwenden, können Sie dies tun".
Und wenn Sie nicht zufällig Lodash verwenden, können Sie es npm.. keine Offenheit für die Dramaqueen @Blaze612YT
Dies ist möglich, indem man alle Elemente in einer Schleife durchläuft und sie bei jeder Iteration zu einem sum
-Variable.
var array = [1, 2, 3];
for (var i = 0, sum = 0; i < array.length; sum += array[i++]);
JavaScript kennt kein Block-Scoping, also sum
zugänglich sein wird:
console.log(sum); // => 6
Das Gleiche wie oben, jedoch mit Anmerkungen versehen und als einfache Funktion aufbereitet:
function sumArray(array) {
for (
var
index = 0, // The iterator
length = array.length, // Cache the array length
sum = 0; // The total amount
index < length; // The "for"-loop condition
sum += array[index++] // Add number on each iteration
);
return sum;
}
Auch wenn es clever ist, würde ich Code finden, der sum
außerhalb der Schleife viel besser lesbar.
@BeniCherniavsky-Paskin Ja, ich auch... Ich weiß nicht, warum ich es an diesem Tag so gemacht habe... Wie auch immer, ich lasse es so wie es ist! Es ist nur ein Beispiel für wie wir es könnten... ;)
arr.reduce(function (a, b) {
return a + b;
});
Referenz: _Array.prototype.reduce()_
OK, stellen Sie sich vor, Sie haben dieses Feld unten:
const arr = [1, 2, 3, 4];
Beginnen wir mit der Untersuchung von viele verschiedene Möglichkeiten zu tun, da ich hier keine umfassende Antwort finden konnte:
1) Verwendung der eingebauten Funktion reduce()
function total(arr) {
if(!Array.isArray(arr)) return;
return arr.reduce((a, v)=>a + v);
}
2) Verwendung der for-Schleife
function total(arr) {
if(!Array.isArray(arr)) return;
let totalNumber = 0;
for (let i=0,l=arr.length; i<l; i++) {
totalNumber+=arr[i];
}
return totalNumber;
}
3) Verwendung der while-Schleife
function total(arr) {
if(!Array.isArray(arr)) return;
let totalNumber = 0, i=-1;
while (++i < arr.length) {
totalNumber+=arr[i];
}
return totalNumber;
}
4) Array forEach verwenden
function total(arr) {
if(!Array.isArray(arr)) return;
let sum=0;
arr.forEach(each => {
sum+=each;
});
return sum;
};
und nennen Sie es so:
total(arr); //return 10
Es ist nicht empfehlenswert, so etwas als Prototyp für Array zu verwenden...
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)
.