Wie prüfe ich, ob eine Variable in JavaScript ein Array ist?
if (variable.constructor == Array)
Wie prüfe ich, ob eine Variable in JavaScript ein Array ist?
if (variable.constructor == Array)
Ich dachte, ich würde eine weitere Option für diejenigen hinzufügen, die bereits die Underscore.js-Bibliothek in ihrem Skript verwenden. Underscore.js hat eine isArray()-Funktion (siehe http://underscorejs.org/#isArray ).
_.isArray(object)
Gibt true zurück, wenn das Objekt ein Array ist.
In Crockford's JavaScript Die guten Seiten gibt es eine Funktion, die prüft, ob das angegebene Argument ein Array ist:
var is_array = function (value) {
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};
Er erklärt:
Zuerst fragen wir, ob der Wert wahrheitsgemäß ist. Dies geschieht, um null und andere falsche Werte abzulehnen. Zweitens fragen wir, ob der typeof-Wert "object" ist. Dies ist bei Objekten, Arrays und (seltsamerweise) null der Fall. Drittens fragen wir, ob der Wert eine Längeneigenschaft hat, die eine Zahl ist. Dies ist bei Arrays immer der Fall, bei Objekten jedoch normalerweise nicht. Viertens fragen wir, ob der Wert eine Splice-Methode enthält. Auch dies ist bei allen Arrays der Fall. Schließlich fragen wir, ob die Eigenschaft length aufzählbar ist (wird length durch eine for in-Schleife erzeugt?). Dies wird für alle Arrays falsch sein. Dies ist der zuverlässigste Test für die Array-Eigenschaft, den ich gefunden habe. Es ist bedauerlich, dass er so kompliziert ist.
Die Universallösung finden Sie unten:
Object.prototype.toString.call(obj)=='[object Array]'
Ab ECMAScript 5 ist eine formale Lösung :
Array.isArray(arr)
Auch für alte JavaScript-Bibliotheken können Sie die unten stehende Lösung finden, obwohl sie nicht genau genug ist:
var is_array = function (value) {
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
};
Die Lösungen sind von http://www.pixelstech.net/topic/85-How-to-check-whether-an-object-is-an-array-or-not-in-JavaScript
Für diejenigen, die Code-Golf spielen, ein unzuverlässiger Test mit den wenigsten Zeichen:
function isArray(a) {
return a.map;
}
Dies wird üblicherweise verwendet, wenn eine Hierarchie durchlaufen/verflacht wird:
function golf(a) {
return a.map?[].concat.apply([],a.map(golf)):a;
}
input: [1,2,[3,4,[5],6],[7,[8,[9]]]]
output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
3 Stimmen
Die Prüfung, ob ein Objekt ein Array ist, hat einige spezifische Vorbehalte... Die Antwort von Peter ist die einzige, die Sie verwenden sollten.
1 Stimmen
@Andy Es scheint, dass meine Antwort nicht die beste ist. Vielleicht sollten Sie eine andere Antwort als akzeptiert auswählen?
2 Stimmen
Gutes Argument, Peter. Mir war nicht klar, dass Ihre Antwort solche Kommentare erhält. Ich glaube, ich habe längst begonnen, die JQuery.isArray-Funktion zu verwenden, wenn ich nach Arrays suche, und interessanterweise ist das anders implementiert als jede andere Antwort, die hier gegeben wurde. Ich habe die beliebte Antwort als richtig markiert.
2 Stimmen
Das ist leider falsch. Ich habe ein wenig tiefer geschaut und (ab Version 1.6.2) JQuery prüft immer noch den Typ mit Vergleichen in der Form.... toString.call(obj) === "[object Array]"
1 Stimmen
Für IE8-Unterstützung würde ich Folgendes tun
if ('push' in variable.__proto__)
ist der schnellste und vielleicht beste Weg, um zu prüfen, ob eine Variable ein Array ist.0 Stimmen
jsben.ch/#/QgYAV - ein Benchmark der häufigsten Wege
0 Stimmen
stackoverflow.com/questions/4775722/check-if-object-is-array/
8 Stimmen
"Diese Frage wurde schon einmal gestellt" ... NEIN, diese Frage wurde NACH dieser Frage gestellt