2149 Stimmen

Wie prüfe ich, ob eine Variable in JavaScript ein Array ist?

Wie prüfe ich, ob eine Variable in JavaScript ein Array ist?

if (variable.constructor == Array)

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.

16voto

Benjen Punkte 2625

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.

1 Stimmen

Die underscore js-Implementierung verwendet die native Array.isArray falls vorhanden, andernfalls wird die toString Methode.

1 Stimmen

Die gleiche Funktion ist in Lodash vorhanden

9voto

Yunzhou Punkte 563

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.

5 Stimmen

Und das waren nur die guten Seiten. Stellen Sie sich vor, wenn "JavaScript The Bad Parts" veröffentlicht wird...

9voto

joseph.l.hunsaker Punkte 553

Wenn Sie Angular verwenden, können Sie die Funktion angular.isArray() verwenden

var myArray = [];
angular.isArray(myArray); // returns true

var myObj = {};
angular.isArray(myObj); //returns false

http://docs.angularjs.org/api/ng/function/angular.isArray

1 Stimmen

Sie können auch nicht Angular-spezifische, aber nur IE9+ und alle Standardbrowser verwenden: <pre><code> Array.isArray(myArray); //returns true Array.isArray(myObj); //returns false </code> </pre>

6voto

PixelsTech Punkte 3031

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

3voto

Joe Frambach Punkte 26262

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.com

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.

Powered by:

X