Gibt es in Javascript eine Möglichkeit, so etwas einfach zu schreiben:
[1,2,3].times do {
something();
}
Gibt es eine Bibliothek, die möglicherweise eine ähnliche Syntax unterstützt?
Update: zur Verdeutlichung - Ich möchte something()
für jede Array-Element-Iteration 1,2- bzw. 3-mal aufgerufen werden
javascript
jquery
underscore.js
BreakPhreak
quelle
quelle
Antworten:
Diese Antwort basiert
Array.forEach
ohne Bibliothek auf nativer Vanille .Um im Grunde
something()
dreimal anzurufen , verwenden Sie:unter Berücksichtigung der folgenden Funktion:
Der Auslauf wird sein
Um diese Fragen zu beantworten, haben Sie folgende Möglichkeiten,
something()
1, 2 bzw. 3 Mal anzurufen :Es ist 2017, Sie können ES6 verwenden:
oder im guten alten ES5:
In beiden Fällen wird der Auslauf sein
Der Auslauf wird sein
(einmal, dann zweimal, dann dreimal)
quelle
something
wird nur dreimal aufgerufen, er sollte sechsmal aufgerufen werden.[...Array(i)]
oder verwendenArray(i).fill()
, je nach Ihren Anforderungen für die tatsächlichen Indizes..forEach(something)
Verwenden Sie einfach eine Schleife:
quelle
Mögliche ES6-Alternative.
Und wenn Sie möchten, dass es "1,2- bzw. 3-mal aufgerufen wird".
Aktualisieren:
Entnommen aus dem Füllen von Arrays mit undefinierten
Dies scheint eine optimierte Methode zum Erstellen des anfänglichen Arrays zu sein. Ich habe dies auch aktualisiert, um die von @ felix-eve vorgeschlagene zweite Parameterzuordnungsfunktion zu verwenden.
quelle
Array.from(Array(3)).forEach(something)
Array.from()
verfügt über einen optionalen zweiten ParametermapFn
, mit dem Sie eine Zuordnungsfunktion für jedes Element des Arrays ausführen können, sodass forEach nicht verwendet werden muss. Sie können einfach tun:Array.from({length: 3}, () => somthing() )
Da Sie Underscore erwähnen:
Angenommen,
f
Sie möchten die Funktion aufrufen:wird den Trick machen. Zum Beispiel mit erhalten
f = function (x) { console.log(x); }
Sie auf Ihrer Konsole:0 0 1 0 1 2
quelle
_(3).times(function(n){return n;});
sollte den Trick machen. Siehe die Dokumente hier.Mit lodash :
Oder wenn Sie etwas N-mal machen wollen :
Siehe diesen Link für die
lodash
Installationquelle
Erstellen Sie ein Array und
fill
alle Einzelteile mitundefined
somap
Methode funktionieren könnte:Verwenden der Old-School-Reveres-Schleife:
quelle
Mit der Destrukturierung können Sie auch Folgendes tun
oder wenn Sie Index benötigen
quelle
Wenn Sie Underscorejs nicht verwenden können, können Sie es selbst implementieren. Wenn Sie den Prototypen Number und String neue Methoden hinzufügen, können Sie dies folgendermaßen tun (mithilfe der ES6-Pfeilfunktionen):
Sie müssen lediglich einen Funktionsausdruck (mit einem beliebigen Namen) erstellen und ihn einem beliebigen Eigenschaftsnamen (auf den Prototypen) zuweisen, auf den Sie zugreifen möchten:
quelle
Es gibt eine fantastische Bibliothek namens Ramda, die Underscore und Lodash ähnelt, aber leistungsfähiger ist.
Ramda enthält viele nützliche Funktionen. Siehe Ramda-Dokumentation
quelle
Sie können die Länge des Arrays verwenden, um die Häufigkeit Ihrer Aufgabe auszuführen.
oder
quelle
Sie können verwenden
Array.forEach
Beispiel:
oder mit jQuery
http://api.jquery.com/jQuery.each/
quelle
forEach
es nur in IE ab Version 9 unterstützt: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Sie können es so nennen:
quelle
und
oder (über https://stackoverflow.com/a/20066663/275501 )
quelle
Verwenden von jQuery
.each()
ODER
BEARBEITEN
Mit reinem JS können Sie wie folgt vorgehen:
quelle
Verwenden Sie einfach eine verschachtelte Schleife (möglicherweise in einer Funktion eingeschlossen).
Dann nenne es einfach so:
quelle
Diese Antworten sind alle gut und gut und IMO @Andreas ist das Beste, aber in JS müssen wir oft asynchron vorgehen. In diesem Fall hat async Sie behandelt:
http://caolan.github.io/async/docs.html#times
Diese 'Zeiten'-Funktionen sind für die meisten Anwendungscodes nicht sehr nützlich, sollten jedoch zum Testen nützlich sein.
quelle
quelle
Gegeben eine Funktion
something
:Und eine neue Methode
times
zumArray
Prototyp hinzugefügt :Dieser Code:
Gibt dies aus:
Was meiner Meinung nach Ihre aktualisierte Frage beantwortet (5 Jahre später), aber ich frage mich, wie nützlich es ist, diese Arbeit auf einem Array zu haben? Wäre der Effekt nicht der gleiche wie beim Aufrufen
[6].times(something)
, der wiederum wie folgt geschrieben werden könnte:(obwohl die Verwendung
_
als Junk-Variable wahrscheinlich zu Lodash oder Unterstrichen führen wird, wenn Sie sie verwenden)quelle
let
wie in verwendenfor (let _ of Array(6)) something()
, um zu verhindern, dass zumindest außerhalb des Lodashs ein Überfall auftritt.Array.from (ES6)
Verwenden Sie es so:
Oder
Oder
quelle
Verwenden von
Array.from
und.forEach
.quelle
Angenommen, wir können eine ES6-Syntax wie den Spread-Operator verwenden, möchten wir etwas so oft tun wie die Summe aller Zahlen in der Sammlung.
In diesem Fall beträgt
[1,2,3]
die Gesamtzahl der Zeiten 6, dh 1 + 2 + 3, wenn die Zeiten gleich sind .Dieser Beitrag sollte hilfreich sein, wenn die Logik hinter dem Erstellen und Verbreiten eines Arrays nicht offensichtlich ist.
quelle
TypeScript-Implementierung:
Für diejenigen unter Ihnen, die daran interessiert sind, wie sie implementiert werden sollen
String.times
undNumber.times
auf eine Art und Weise, die typsicher ist und mit dem funktioniertthisArg
, hier geht's:Einen Link zum TypeScript-Spielplatz mit einigen Beispielen finden Sie hier
Dieser Beitrag implementiert Lösungen von: Andreas Bergström , vinyll , Ozay Duman & SeregPie
quelle