Domanda Controlla se l'oggetto è array?


Sto cercando di scrivere una funzione che accetta o un elenco di stringhe o una singola stringa. Se si tratta di una stringa, quindi voglio convertirlo in un array con solo un elemento. Quindi posso passarci sopra senza paura di un errore.

Quindi, come posso controllare se la variabile è un array?


Ho arrotondato le varie soluzioni di seguito e creato un test di jsperf.


2138
2018-01-23 18:53


origine


risposte:


Nei browser moderni puoi farlo

Array.isArray(obj)

(Sostenuto da Chrome 5, Firefox 4.0, IE 9, Opera 10.5 e Safari 5)

Per compatibilità con le versioni precedenti è possibile aggiungere quanto segue

# 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]';
  }
};

Se usi jQuery puoi usare jQuery.isArray(obj) o $.isArray(obj). Se usi il trattino basso puoi usare _.isArray(obj)

Se non hai bisogno di rilevare array creati in frame diversi puoi anche solo usarlo instanceof

obj instanceof Array

311
2018-01-06 18:11



Il metodo fornito nello standard ECMAScript per trovare la classe di Object consiste nell'utilizzare il toString metodo da Object.prototype.

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

O potresti usare typeof per verificare se si tratta di una stringa:

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

O se non sei preoccupato per le prestazioni, puoi semplicemente fare a concat in una nuova matrice vuota.

someVar = [].concat( someVar );

C'è anche il costruttore che puoi interrogare direttamente:

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

Dai un'occhiata a trattamento completo a partire dal @ T.J. Crowder di blog, come pubblicato nel suo commento qui sotto.

Controlla questo segno di riferimento per avere un'idea di quale metodo si comporta meglio: http://jsben.ch/#/QgYAV

A partire dal @Bharath converti stringa in array usando Es6 per la domanda posta:

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

supponiamo:

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



Vorrei innanzitutto verificare se la tua implementazione supporta isArray:

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

Si potrebbe anche provare a utilizzare il instanceof operatore

v instanceof Array

1223
2018-01-23 18:55



jQuery offre anche un $.isArray() metodo:

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



Questo è il più veloce tra tutti i metodi (tutti i browser supportati):

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

84
2017-12-06 10:12



Array.isArray funziona velocemente, ma non è supportato da tutte le versioni dei browser. Quindi potresti fare un'eccezione per gli altri e usare il metodo universale:

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

31
2017-12-10 17:01



Immagina di avere questa matrice qui sotto:

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

Javascript (nuovi e vecchi browser):

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

o

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

o

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

quindi chiamalo così:

isArray(arr);

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

Array.isArray(arr);

jQuery:

$.isArray(arr);

Angolare:

angular.isArray(arr);

Underscore e Lodash:

_.isArray(arr);

28
2017-12-27 13:17



Semplice funzione per verificare questo:

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

20
2017-09-04 17:56



Puoi provare questo approccio: http://web.archive.org/web/20100424091244/http://www.ajaxdr.com/code/javascript-version-of-phps-is_array-function/

MODIFICARE: inoltre, se stai già usando JQuery nel tuo progetto, puoi usare la sua funzione $ .isArray ().


16
2018-01-23 18:56



Come dice MDN qui:

uso Array.isArray o Object.prototype.toString.call per differenziare   oggetti regolari dagli array

Come questo:

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

  • Array.isArray(arr)


13
2017-09-14 21:02



Puoi controllare il tipo di variabile se è un array con;

var myArray=[];

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

12
2018-01-15 08:58