Frage Prüfen ob Objekt Array ist?


Ich versuche, eine Funktion zu schreiben, die entweder eine Liste von Zeichenfolgen oder eine einzelne Zeichenfolge akzeptiert. Wenn es eine Zeichenfolge ist, möchte ich sie in ein Array mit nur einem Element konvertieren. Dann kann ich es ohne Angst vor einem Fehler durchlaufen.

Wie überprüfe ich, ob die Variable ein Array ist?


Ich habe die verschiedenen Lösungen unten zusammengefasst und ein Jsperf Test.


2138
2018-01-23 18:53


Ursprung


Antworten:


In modernen Browsern können Sie tun

Array.isArray(obj)

(Unterstützt durch Chrome 5, Firefox 4.0, IE 9, Opera 10.5 und Safari 5)

Aus Gründen der Abwärtskompatibilität können Sie Folgendes hinzufügen

# only implement if no native implementation is available
if (typeof Array.isArray === 'undefined') {
  Array.isArray = function(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
  }
};

Wenn Sie jQuery verwenden, können Sie verwenden jQuery.isArray(obj) oder $.isArray(obj). Wenn Sie Unterstreichung verwenden, können Sie verwenden _.isArray(obj)

Wenn Sie Arrays, die in verschiedenen Frames erstellt wurden, nicht erkennen müssen, können Sie sie auch einfach verwenden instanceof

obj instanceof Array

311
2018-01-06 18:11



Die Methode, die im ECMAScript-Standard zum Auffinden der Objektklasse angegeben wird, ist die Verwendung des toString Methode von Object.prototype.

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
    alert( 'Array!' );
}

Oder du könntest es benutzen typeof um zu testen, ob es ein String ist:

if( typeof someVar === 'string' ) {
    someVar = [ someVar ];
}

Oder wenn Sie sich keine Gedanken über die Leistung machen, können Sie einfach ein concat zu einem neuen leeren Array.

someVar = [].concat( someVar );

Es gibt auch den Konstruktor, den Sie direkt abfragen können:

if (somevar.constructor.name == "Array") {
    // do something
}

Schau dir a an gründliche Behandlung von @ T.J. Crowders Blog, wie in seinem Kommentar unten veröffentlicht.

Schau dir das an Benchmark um eine Vorstellung davon zu bekommen, welche Methode besser funktioniert: http://jsben.ch/#/QgYAV

Von @ Bharat Konvertieren von String in Array mit Es6 für die gestellte Frage:

const convertStringToArray = (object) => {
   return (typeof object === 'string') ? Array(object) : object 
}

annehmen:

let m = 'bla'
let n = ['bla','Meow']
let y = convertStringToArray(m)
let z = convertStringToArray(n)
console.log('check y: '+JSON.stringify(y)) . // check y: ['bla']
console.log('check y: '+JSON.stringify(z)) . // check y: ['bla','Meow']

1865
2018-01-23 18:54



Ich würde zuerst prüfen, ob Ihre Implementierung unterstützt isArray:

if (Array.isArray)
    return Array.isArray(v);

Sie könnten auch versuchen, die instanceof Operator

v instanceof Array

1224
2018-01-23 18:55



jQuery bietet auch ein $.isArray() Methode:

var a = ["A", "AA", "AAA"];

if($.isArray(a)) {
  alert("a is an array!");
} else {
  alert("a is not an array!");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


283
2018-04-02 12:15



Dies ist die schnellste Methode (alle unterstützten Browser):

function isArray(obj){
    return !!obj && obj.constructor === Array;
}

84
2017-12-06 10:12



Array.isArray funktioniert schnell, wird jedoch nicht von allen Browserversionen unterstützt. Sie können also eine Ausnahme für andere machen und die universelle Methode verwenden:

    Utils = {};    
    Utils.isArray = ('isArray' in Array) ? 
        Array.isArray : 
        function (value) {
            return Object.prototype.toString.call(value) === '[object Array]';
        }

31
2017-12-10 17:01



Stellen Sie sich vor, Sie haben dieses Array unten:

var arr = [1,2,3,4,5];

Javascript (neue und ältere Browser):

function isArray(arr) {
  return arr.constructor.toString().indexOf("Array") > -1;
}

oder

function isArray(arr) {
  return arr instanceof Array;
}

oder

function isArray(arr) {
  return Object.prototype.toString.call(arr) === '[object Array]';
}

dann nenne es so:

isArray(arr);

Javascript (IE9 +, Ch5 +, FF4 +, Saf5 +, Opera10.5 +)

Array.isArray(arr);

jQuery:

$.isArray(arr);

Eckig:

angular.isArray(arr);

Unterstrich und Lazash:

_.isArray(arr);

28
2017-12-27 13:17



Einfache Funktion, um dies zu überprüfen:

function isArray(object)
{
    if (object.constructor === Array) return true;
    else return false;
}

20
2017-09-04 17:56



Sie können diesen Ansatz versuchen: http://web.archive.org/web/20100424091244/http://www.ajaxdr.com/code/javascript-version-of-phps-is_array-function/

BEARBEITENWenn Sie JQuery bereits in Ihrem Projekt verwenden, können Sie dessen Funktion verwenden $ .isArray ().


16
2018-01-23 18:56



Wie MDN sagt hier drin:

benutzen Array.isArray oder Object.prototype.toString.call differenzieren   reguläre Objekte aus Arrays

So was:

  • Object.prototype.toString.call(arr) === '[object Array]', oder

  • Array.isArray(arr)


13
2017-09-14 21:02



Sie können den Typ Ihrer Variablen überprüfen, ob es sich um ein Array mit;

var myArray=[];

if(myArray instanceof Array)
{
....
}

12
2018-01-15 08:58