Wie dynamisch füllen Sie ein array mit einer for-in-Schleife
Gibt ein array set
mit einer Folge von Zufallszahlen zwischen 1 und 500 ich habe versucht, umgestalten, ein standard für die Schleife for(var i = 0; i< 50; i++)
und das klappte auch aber als ich versuchte, zu tun, eine Umgestaltung mit einem for in
Schleife nicht. Meine Vermutung ist, dass es etwas über die array.length
Eigenschaft und es ist zu verwenden, ich bin vermasseln.
TL;DR Warum hat diese liefert ein array von 50 Undefinierte Elemente eher als ein array mit 50 zufälligen Ganzzahlen? Und gibt es einen Weg, um diesen Ansatz zu arbeiten?
var set = [];
set.length = 50;
for(var i in set){
set[i] = Math.floor((Math.random() * 500) + 1);
}
console.log(set);
Ähnliche Fragen: Hilfreich, aber nicht ganz das, was ich bin auf der Suche nach
- Schleife über ein array in JavaScript
- Warum ist die Verwendung von "for...in" mit array-iteration ist eine schlechte Idee?
Update
Als ich vermutete, den Punkt, den ich fehlte, war, dass die Einstellung set.length
nicht das hinzufügen von Elementen der array-es schafft nur eine spärliche array (ein array mit Lücken). In meinem Fall können Sie nicht verwenden for in
denn es gibt nichts, was in das array zu Durchlaufen. Ich würde entweder zum Auffüllen der array mit dummy-Inhalt(d.h. die leeren Saiten) oder mehr logisch getrennten Bereich Teil habe ich versucht zu implementieren, mit der .length
- Eigenschaft in einer separaten range
variable.
Funktionierende version
var set = [], range = 50;
for(var i = 0; i < range; i++){
set[i]=Math.floor((Math.random() * 500) + 1);
}
console.log(set);
InformationsquelleAutor jeanpier_re | 2015-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den zweiten link scheint Ihre Antwort.
Den
for (var item in array)
schaut das array für jedes Element im array, speichert dieses Element in der "item" und können Sie iteriert über jedes Element. Einstellung der array.Länge nicht geben Sie alle Elemente im array, und damit diefor in
nicht ausgeführt, an alle - es gibt nichts zu Durchlaufen.InformationsquelleAutor Hy-
Es klingt für mich wie Sie wollen, erstellen Sie eine statische Größe array mit dynamischen Inhalten. Wenn dies der Fall ist, erstellen Sie das array mit der richtigen Größe zunächst. Das würde das array erstellen für Sie. Sie können jedoch die automatische Auffüllen der array mit zufälligen Werten, die Sie wollte, in etwa so:
Einmal das array wird automatisch ausgefüllt, den rest muss der code wie erwartet funktionieren, indem Sie einfach den Wert der Zufallszahl in das array so:
Dies ist, wo ich diese: Erstellen Sie eine JavaScript-array mit 1...N
InformationsquelleAutor GKnight
Gibt Sie undefined zurück, da Sie die array-Länge mit
set.length
. Wenn diese aufgerufen wird, werden alle Elemente des Arrays sindundefined
Ich würde entfernen Sie die
set.length
Linie insgesamt.Aktualisierten code
undefined
": die Wahrheit ist, das array hat keine Elemente, wie kann bestimmt werden, mithilfeObject.getOwnPropertyNames(set)
. Siehe meine Antwort.InformationsquelleAutor Richard Hamilton
for in
scheint nicht mögen, was Sie hier wollen. Versuchen Sie einefor
Schleife:InformationsquelleAutor Kevin Boucher
Ist das Problem nicht mit der
array.length
Eigenschaft ist es, dass diese Methode eine Vergrößerung der array nicht erstellen Sie "Eigenschaften". Beachten Sie Folgendes:Was Sie tun ist, erstellen Sie ein array mit null Elementen, dann erweitert es sind 50 "Löcher", wie der array mit zwei Löchern. Da dieses array hat keine zählbare Eigenschaften (
length
ist nicht aufzählbar), können Sie nicht Durchlaufen, es mitfor...in
. Letztlich, Sie wären besser dran mit einem traditionellenfor
Schleife.BEARBEITEN
Die beste definition von "Loch", dass ich mit oben kommen kann ist, vor Ort eine nicht vorhandene Eigenschaft ein array, dessen name ist ein integer
i
so dass0 <= i && i < array.length
. (Vor diesem hintergrund ist es wichtig zu beachten, dass JavaScript-arrays sind nur Objekte mit numerischen Eigenschaften als "Indizes" und ein paar zusätzliche Besonderheiten.)Gibt es zwei Möglichkeiten, eine Eigenschaft Verweis auf undefined zurück: entweder ist die Eigenschaft nicht vorhanden ist oder die Eigenschaft vorhanden und enthält Sie den Wert undefined. Also:
Nun, ein Loch ist eine nicht vorhandene Eigenschaft, wie
myObject.nonExistentProperty
oben, so dass Sie versuchen, darauf zuzugreifen wird es zurückundefined
.set[2]
in meinem Beispiel?Siehe mein edit. In kurzen,
set[2]
"undefined" zurückgibt, weil2
existiert nicht als eine Eigenschaft vonset
.InformationsquelleAutor Brian McCutchon