In Python, wo [2]
sich eine Liste befindet, gibt der folgende Code diese Ausgabe aus:
[2] * 5 # Outputs: [2,2,2,2,2]
Gibt es eine einfache Möglichkeit, dies mit einem Array in JavaScript zu tun?
Ich habe die folgende Funktion geschrieben, aber gibt es etwas kürzeres oder besseres?
var repeatelem = function(elem, n){
// returns an array with element elem repeated n times.
var arr = [];
for (var i = 0; i <= n; i++) {
arr = arr.concat(elem);
};
return arr;
};
javascript
arrays
repeat
Curious2learn
quelle
quelle
Antworten:
Sie können es so machen:
Das Array wird in jeder Iteration verdoppelt, sodass mit wenigen Iterationen ein wirklich großes Array erstellt werden kann.
Hinweis: Sie können Ihre Funktion auch erheblich verbessern, indem Sie
push
anstelle von verwendenconcat
, daconcat
bei jeder Iteration ein neues Array erstellt wird. So (nur als Beispiel dafür gezeigt, wie Sie mit Arrays arbeiten können):quelle
arr = new Array(len);
zuzuweisen und sie dann durch Index in der Schleife zuzuweisen, darr[i] = value;
. H. Auf diese Weise zahlen Sie nur O (n), anstatt das Array während des Wachstums neu zuweisen zu müssen. Im Allgemeinen ist es immer besser, wachsende Arrays durch Anhängen zu vermeiden, wenn dies möglich ist. Wenn Sie die endgültige Größe kennen, verwenden Sie sie.Array.from({length:5}).map(x => 2)
In ES6 mithilfe der Array fill () -Methode
quelle
Array(5).fill([1,2,3]).flat()
. Beachten Sie, dass flat () immer noch sehr experimentell ist und die Browserunterstützung schlecht ist.fill
einmal ausgewertet wird, sodassArray(9).fill(someMutable)
neun Verweise aufsomeMutable
das Array erstellt werden (durch Mutation eines wird 'all' mutiert).quelle
Array(...Array(10)).map(() => 5)
mit dem Spread-Operator oder auch mitArray.from(Array(10)).map(() => 5)
Array.from({length: 10}, () => 5);
lenght = 10
ohne aufzählbare Eigenschaften..map
funktioniert nur bei aufzählbaren Eigenschaften. Die.apply
Methode nimmt dieses Array und ordnet es einemarguments array
(Array-ähnlichen Objekt) zu, das an dieArray
Konstruktorfunktion übergeben werden soll. Das Argumentarray kann nicht dünn sein, daher werden die fehlenden Eigenschaften auf gesetztundefined
und aufzählbar. Jetzt können wir.map
wie vorgesehen verwendenDu kannst es versuchen:
Update (01/06/2018) :
Jetzt können Sie eine Reihe von Zeichen wiederholen lassen.
Hinweis: Weitere Informationen zu Kompatibilität (...) und von (...) finden Sie auf Kompatibilität und Browserunterstützung.
Update (11.05.2019) :
Eine andere Möglichkeit, ohne
fill
oder zu verwendenfrom
, funktioniert für Zeichenfolgen beliebiger Länge:quelle
Array.from({length:5}, i => 1) // [1, 1, 1, 1, 1]
oder erstellen Sie ein Array mit zunehmendem Wert
Array.from({length:5}, (e, i)=>i) // [0, 1, 2, 3, 4]
quelle
Array.from({length:5}, i => 1)
=>i
ist,undefined
da es einen leeren Wert darstelltArray.from({length:5}, (e, i)=>i)
=>e
ist,undefined
weil es einen leeren Wert darstellt. Es sollte seinArray.from({length:5}, v => 1)
undArray.from({length:5}, (v, i)=>i)
In lodash ist es nicht so schlimm:
EDIT : Noch besser:
EDIT : Noch besser:
quelle
[c] * n
kann geschrieben werden als:so für
[2] * 5
quelle
Sie können die Funktionalität von Array auch folgendermaßen erweitern:
Ich sollte beachten, dass das Erweitern der Funktionalität von integrierten Objekten Probleme verursachen kann, wenn Sie mit Bibliotheken von Drittanbietern arbeiten. Wägen Sie dies immer in Ihre Entscheidungen ein.
quelle
fill
jeden Index im Array übergeben, sich auf dasselbe Objekt bezieht. Wenn Sie also eines ändern, werden alle geändert. Dies ist nicht allzu schwer zu lösen, wenn es zu einem Problem wird.if (!Array.prototype.fill) { }
In der Node.js REPL:
quelle
Array.from({length: 5}, x => 2);
ref. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Using_arrow_functions_and_Array.fromFalls Sie ein Array mehrmals wiederholen müssen :
inspiriert von dieser Antwort
quelle
Kein einfacher Weg. Sie müssen eine Schleife erstellen und Elemente in das Array verschieben.
quelle
push
esconcat
in Bezug auf die Effizienz besser oder besser?Verwenden Sie diese Funktion:
Oder für eine kompaktere Version:
Oder für eine Curry-fähige Version:
Sie können diese Funktion mit einer Liste verwenden:
quelle
Wenn Sie ein Array wiederholen müssen, verwenden Sie Folgendes.
wird zurückkehren
quelle
Ein weiterer Einzeiler:
quelle
Diese Funktion erstellt ein Array von (Längen-) Elementen, wobei jedes Element gleich (Wert) ist, solange (Wert) eine Ganzzahl oder eine Zeichenfolge einer Ganzzahl ist. Alle Dezimalzahlen werden abgeschnitten. Wenn Sie Dezimalzahlen möchten, ersetzen Sie "parseInt ( " durch " parseFloat ( ").
Beispiele:
quelle
Ich hatte Probleme mit den genannten Methoden, wenn ich ein Array wie
Um dies zu bekommen, benutze ich:
quelle
cycle
.Ich habe dies heute entdeckt, als ich versucht habe, ein 2D-Array ohne Schleifen zu erstellen. Rückblickend ist das Verbinden eines neuen Arrays ordentlich. Ich habe versucht, ein neues Array zuzuordnen, was nicht funktioniert, da die Zuordnung leere Slots überspringt.
Das Zeichen "#" kann ein beliebiges gültiges Einzelzeichen sein. Die 5 wäre eine Variable für die Anzahl der gewünschten Elemente. Die 7 wäre der Wert, mit dem Sie Ihr Array füllen möchten.
Die neue Füllmethode ist besser, und als ich sie codierte, wusste ich nicht, dass sie existiert, und ich wusste auch nicht, dass Wiederholung es6 ist. Ich werde einen Blog-Beitrag über die Verwendung dieses Tricks in Verbindung mit Reduzieren schreiben, um coole Dinge zu tun.
http://jburger.us.to/2016/07/14/functionally-create-a-2d-array/
quelle
Versuche dies:
quelle
quelle
Wenn Sie einen Utlity-Gürtel wie lodash / underscore verwenden, können Sie dies so tun :)
quelle
Kann auch als Einzeiler verwendet werden:
quelle
Dies verbessert die Antwort von Vivek und funktioniert für Zeichenfolgen beliebiger Länge, um ein Array mit der Länge n zu füllen:
Array(n+1).join('[string to be repeated][separator]').split('[separator]').slice(0, n)
quelle
Ich brauchte eine Möglichkeit, ein Array (mit n Elementen) m-mal zu wiederholen / zu schleifen.
Verteilen Sie beispielsweise eine Liste (von Personen) auf eine Woche / einen Monat. Nehmen wir an, ich habe drei Namen und möchte, dass sie sich in einer Woche wiederholen:
quelle