Wie erstelle ich ein Array, wenn ein Array noch nicht existiert?

73

Wie erstelle ich ein Array, wenn es noch nicht existiert? Mit anderen Worten, wie wird eine Variable standardmäßig auf ein leeres Array gesetzt?

Ajsie
quelle

Antworten:

89

Wenn Sie überprüfen möchten, ob ein Array x vorhanden ist, und es erstellen möchten, können Sie dies tun

x = ( typeof x != 'undefined' && x instanceof Array ) ? x : []
Reich
quelle
2
Dies funktioniert in den meisten Fällen, deckt Sie jedoch nicht ab, wenn Sie ein Array überprüfen möchten, das von einem anderen globalen ArrayKonstruktor instanziiert wurde. Dies kann beim Erstellen von Skripten über Frames hinweg auftreten.
James
1
Das ist wahr. Wie würde man mit diesem Fall umgehen?
Rich
2
@Rich: Siehe meine Antwort hier: stackoverflow.com/questions/1961528/… , es verhält sich in DOM-Umgebungen mit mehreren Frames korrekt.
Christian C. Salvadó
11
Der richtige Weg, dies heutzutage zu tun, ist die Verwendung von Array.isArray(x): stackoverflow.com/a/38670091/271442
mynameistechno
Es funktioniert nicht, wenn es null ist . Eine vollständige Überprüfung wäre also. if (Array.isArray(array) && array.length)Weitere Informationen
Claudiu
65
var arr = arr || [];
Brian Campbell
quelle
17
Dies prüft jedoch nicht, ob arr ein Array ist.
Gumbo
9
Du hast recht. Aus der Frage ging nicht hervor, ob im Voraus überprüft werden muss, ob es sich um ein Array handelt, oder ob nur überprüft werden muss, ob die Variable bereits definiert ist. Dies ist eine gängige Redewendung und kürzer und einfacher als die anderen veröffentlichten. Daher dachte ich, ich würde sie veröffentlichen und den Fragesteller entscheiden lassen, ob sie ausreicht.
Brian Campbell
3
Wenn dies arrbereits im jeweiligen Geltungsbereich definiert ist, warum dann var ...? Sie können einfach tunarr = arr || [];
James
3
Die Frage war, zu überprüfen, ob das Array bereits vorhanden ist, und es zu erstellen, wenn nicht. Sie wissen also nicht, ob es bereits definiert ist. Diese Redewendung ist nützlich, wenn Sie mehrere Dateien miteinander verknüpfen möchten und nicht wissen, welche zuerst geladen wird, um eine globale Variable zu definieren, die alle gemeinsam nutzen.
Brian Campbell
@BrianCampbell Ich könnte mich irren, aber wenn das nicht im globalen Rahmen ausgeführt wird, würde es nicht vargehisst werden und daher immer einfach werden []? Edit: nvm, ich irre mich: D
Whitfin
35
const list = Array.isArray(x) ? x : [x];

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

Oder wenn es x sich um ein Array handeln könnte und Sie sicherstellen möchten, dass es eines ist:

const list = [].concat(x);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

mynameistechno
quelle
Würfe x is not definedin beiden Fällen
huysentruitw
10
xist die Variable, die ein Array sein kann oder nicht. Das definieren Sie. Dies ist nur ein Beispielcode ...
mynameistechno
12

Sie können den typeofOperator verwenden , um auf undefiniert zu testen, und den instanceofOperator , um zu testen, ob es sich um eine Instanz von Array handelt :

if (typeof arr == "undefined" || !(arr instanceof Array)) {
    var arr = [];
}
Gumbo
quelle
Sie können die erste Prüfung überspringen, da undefinedes sich nicht um eine Array-Instanz handelt.
Whitfin
2
@zackehh Wenn Sie dies tun, kann es einen Fehler auslösen, wenn arrnoch nicht definiert ist
David
9

Wenn Sie überprüfen möchten, ob das Objekt bereits ein Array ist , können Sie die folgenden Methoden verwenden , um die bekannten Probleme des instanceofOperators bei der Arbeit in DOM-Umgebungen mit mehreren Frames zu vermeiden Object.prototype.toString:

arr = Object.prototype.toString.call(arr) == "[object Array]" ? arr : [];
Christian C. Salvadó
quelle
@ kangax Deklaration ist in diesem Zusammenhang nicht erforderlich.
Justin Johnson
Die Erklärung ist notwendig, aber ich dachte, es sei ziemlich offensichtlich, dass, wenn arrnicht deklariert wird, ein ReferenceErrorWille auf die rechte Seite der Aufgabe geworfen wird ...
Christian C. Salvadó
0
<script type="text/javascript">

array1  = new Array('apple','mango','banana');
var storearray1 =array1;

if (window[storearray1] && window[storearray1] instanceof Array) {
    alert("exist!");
} else {
    alert('not find: storearray1 = ' + typeof storearray1)
    }

</script>   
M RAHMAN
quelle
-6

Wenn Sie von einer Browserumgebung sprechen, sind alle globalen Variablen Mitglieder des Fensterobjekts. Also zu überprüfen:

if (window.somearray !== undefined) {
    somearray = [];
}
Slebetman
quelle