Javascript erstellt ein leeres Array einer bestimmten Größe

91

Wie würde ich in Javascript ein leeres Array einer bestimmten Größe erstellen?

Pseudocode:

X = 3;
createarray(myarray, X, "");

Ausgabe:

   myarray = ["","",""]
gus
quelle
2
Sie würden wahrscheinlich Array.prototype.fill verwenden .
RobG
Mögliches Duplikat der Standard-Array-Werte
Nick Grealy
In Verbindung stehender Beitrag hier .
RBT

Antworten:

65
var arr = new Array(5);
console.log(arr.length) // 5
Mariocatch
quelle
8
Dadurch werden keine Mitglieder erstellt, sondern ein leeres Array mit der Länge 5. Ein äquivalentes Array-Literal ist [,,,,,].
RobG
12
Das OP fragte in javascript how would I create an empty array of a given size. Dies löst dieses Problem.
Mariocatch
12
Das OP hat ein Beispiel für "leer" bereitgestellt.
RobG
6
Nun, dies ist eine weitere Option für die Frage. Sie können jede der Antworten wählen, das ist der Ruhm von Stackoverflow :)
Mariocatch
228

1) Um ein neues Array zu erstellen, über das Sie nicht iterieren können , können Sie den Array-Konstruktor verwenden:

Array(100) oder new Array(100)


2) Sie können ein neues Array erstellen, das wie folgt wiederholt werden kann :

a) Alle JavaScript-Versionen

  • Array.apply: Array.apply(null, Array(100))

b) Ab ES6 JavaScript-Version

  • Destrukturierungsbetreiber: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Array.from Array.from({ length: 100 })

Sie können diese Arrays wie unten abgebildet.

  • Array(4).fill(null).map((u, i) => i) [0, 1, 2, 3]

  • [...Array(4)].map((u, i) => i) [0, 1, 2, 3]

  • Array.apply(null, Array(4)).map((u, i) => i) [0, 1, 2, 3]

  • Array.from({ length: 4 }).map((u, i) => i) [0, 1, 2, 3]

stpoa
quelle
1
Array.prototype.fill (> = ES6) kangax.github.io/compat-table/es6/… ;
ptim
4
Aufklärung des Tages - wenn Sie in Teil (A) erwähnen, dass ein neu erstelltes Array mit Konstruktorsyntax nicht einmal iterierbar ist. Javascript überrascht manchmal wirklich.
RBT
Wie groß ist Array(10000)mit empty x 10000?
Qwerty
1
Seine Länge ist 10000, Sie können es überprüfen durch console.log(Array(10000).length)Aber wenn Sie laufen Array(10000).forEach((u, i) => console.log(i)), erhalten Sie keine Ausgabe
stpoa
Array.apply('x', Array(10))ist eigentlich[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
Polv
43

Wir verwenden Array.from({length: 500})seit 2017.

andrewkslv
quelle
@ gion_13: Ich sehe, dass es abgewählt und meins abgewählt wird. Grund?
7vujy0f0hy
@ 7vujy0f0hy Ich weiß nicht, warum du Stimmen bekommen hast. Ich habe Ihnen eine Gegenstimme gegeben, obwohl Ihre Lösung etwas weniger intuitiv ist als diese.
gion_13
@ gion_13: Danke, dass du bestätigt hast, dass an meiner Lösung nichts falsch ist ☺.
7vujy0f0hy
16

Versuchen Sie es mit whileloop,Array.prototype.push()

var myArray = [], X = 3;
while (myArray.length < X) {
  myArray.push("")
}

Alternativ mit Array.prototype.fill()

var myArray = Array(3).fill("");
guest271314
quelle
.fill()ist eine elegante Einzeilerlösung. Vielen Dank!
Colefner
14

Im Jahr 2018 und von da an werden wir [...Array(500)]zu diesem Zweck verwenden.

7vujy0f0hy
quelle
1
in die Zukunft!
Levi
Komischerweise ist dies (und ähnliches) 50% langsamer als nur (() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })().
Alex
Das stinkt nach vorzeitiger Optimierung. Wenn Sie beabsichtigen, eine Reihe von Arrays mit zig Millionen Elementen zu erstellen, sollten Sie dies in Betracht ziehen, aber ein paar Nanosekunden sind in den meisten Fällen den Lesbarkeitstreffer nicht wert .
JaredMcAteer
7

Wenn Sie ein leeres Array von undefinedElementen möchten , können Sie dies einfach tun

var whatever = new Array(5);

das würde dir geben

[undefined, undefined, undefined, undefined, undefined]

und wenn Sie möchten, dass es mit leeren Zeichenfolgen gefüllt wird, können Sie dies tun

whatever.fill('');

was würde dir geben

["", "", "", "", ""]

Und wenn Sie es in einer Zeile tun möchten:

var whatever = Array(5).fill('');
jeffdill2
quelle
1
neues Array (2) gibt Ihnen nicht [undefiniert, undefiniert]. Es gibt Ihnen ein Array, das nicht iterierbar ist.
JCF
1
@JCF new Array(2)gibt Ihnen [undefined, undefined]und es ist absolut iterierbar. Es ist einfach so, dass bei Vanille-JSs forEach(), von denen ich annehme, dass Sie sie zum Testen Ihrer Theorie verwenden, der Rückruf nicht für Array-Elemente aufgerufen wird, die nicht initialisiert sind (wie undefinedes der Fall wäre). Wenn Sie jedoch andere iterative Methoden verwenden, z. B. jQuery's $.each(), können Sie feststellen, dass die undefinedWerte tatsächlich vorhanden sind : $.each(new Array(5), function(index, element) { console.log('element:', element) }).
Jeffdill2
OK. Es ist noch etwas los, was ich nicht verstehe. Ich erstelle ein neues Array mit new Array(2)und was ich zurück bekomme, ist [ <2 empty items> ]nicht [undefined, undefined]. Die Verwendung .mapauf dem ersteren hat keine Auswirkung. Ich kann es jedoch mit einer for...ofSchleife durchlaufen . Wenn ich ein neues Array in Literalschreibweise erstelle, a = [undefined, undefined]kann ich .mapes verwenden.
JCF
1
@JCF for ... of verwendet das Iterator-Protokoll, verhält sich also anders als forEach / map. Iteratoren verlieren Leere-Informationen
Tomasz Błachut
@ TomaszBłachut @JCF Bitte beachten Sie, dass diese Antwort vor über 4 Jahren gegeben wurde. Zu diesem Zeitpunkt war diese Antwort zu 100% gültig. ES6 und ES7 wurden erst Mitte 2016 bzw. Mitte 2018 für Browser eingeführt. Zum Zeitpunkt dieser Antwort wäre die JS-Version ES5 gewesen. Wenn Sie ein weiterer Beweis dafür brauchen , dass dies ist die Art und Weise ES5 gearbeitet, einfach eine ältere Instanz von Chrome Spin nach oben - zum Zeitpunkt dieser Antwort wäre es v48 gewesen sein - und laufen Array(5). Sie sehen die folgende Ausgabe : [undefined x 5].
jeffdill2
2

Wenn Sie ein anonymes Array mit einigen Werten erstellen möchten, können Sie diese Syntax verwenden.

var arr = new Array(50).fill().map((d,i)=>++i)
console.log(arr)

manan5439
quelle
0

Sie können beide Javascript-Methoden repeat () und split () zusammen verwenden.

" ".repeat(10).split(" ")

Dieser Code erstellt ein Array mit 10 Elementen und jedes Element ist eine leere Zeichenfolge.

const items = " ".repeat(10).split(" ")

document.getElementById("context").innerHTML = items.map((item, index) => index)

console.log("items: ", items)
<pre id="context">

</pre>

Serhan C.
quelle