Question Vérifiez si l'objet est un tableau


J'essaye d'écrire une fonction qui accepte une liste de chaînes, ou une seule chaîne. Si c'est une chaîne, alors je veux la convertir en un tableau avec juste un élément. Ensuite, je peux boucler dessus sans crainte d'erreur.

Alors, comment puis-je vérifier si la variable est un tableau?


J'ai arrondi les différentes solutions ci-dessous et créé un test jsperf.


2138
2018-01-23 18:53


origine


Réponses:


Dans les navigateurs modernes, vous pouvez faire

Array.isArray(obj)

(Supporté par Chrome 5, Firefox 4.0, IE 9, Opera 10.5 et Safari 5)

Pour la rétrocompatibilité, vous pouvez ajouter les éléments suivants

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

Si vous utilisez jQuery, vous pouvez utiliser jQuery.isArray(obj) ou $.isArray(obj). Si vous utilisez le soulignement, vous pouvez utiliser _.isArray(obj)

Si vous n'avez pas besoin de détecter des tableaux créés dans des cadres différents, vous pouvez également utiliser instanceof

obj instanceof Array

311
2018-01-06 18:11



La méthode donnée dans la norme ECMAScript pour trouver la classe d'Object est d'utiliser le toString méthode de Object.prototype.

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

Ou vous pourriez utiliser typeof pour tester si c'est une chaîne:

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

Ou si vous n'êtes pas préoccupé par la performance, vous pouvez simplement faire un concat à un nouveau tableau vide.

someVar = [].concat( someVar );

Il y a aussi le constructeur que vous pouvez interroger directement:

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

Découvrez un traitement approfondi de @ T.J. Crowder blog, tel que posté dans son commentaire ci-dessous.

Regarde ça référence pour avoir une idée de la méthode qui fonctionne le mieux: http://jsben.ch/#/QgYAV

De @Bharath convertir la chaîne en tableau en utilisant Es6 pour la question posée:

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

supposer:

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



Je voudrais d'abord vérifier si votre mise en œuvre prend en charge isArray:

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

Vous pouvez également essayer d'utiliser le instanceof opérateur

v instanceof Array

1224
2018-01-23 18:55



jQuery propose également un $.isArray() méthode:

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



C'est le plus rapide parmi toutes les méthodes (tous les navigateurs supportés):

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

84
2017-12-06 10:12



Array.isArray fonctionne rapidement, mais il n'est pas supporté par toutes les versions de navigateurs. Vous pouvez donc faire une exception pour les autres et utiliser la méthode universelle:

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

31
2017-12-10 17:01



Imaginez que vous avez ce tableau ci-dessous:

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

Javascript (nouveaux et anciens navigateurs):

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

ou

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

ou

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

alors appelle comme ça:

isArray(arr);

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

Array.isArray(arr);

jQuery:

$.isArray(arr);

Angulaire:

angular.isArray(arr);

Underscore et Lodash:

_.isArray(arr);

28
2017-12-27 13:17



Fonction simple pour vérifier ceci:

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

20
2017-09-04 17:56



Vous pouvez essayer cette approche: http://web.archive.org/web/20100424091244/http://www.ajaxdr.com/code/javascript-version-of-phps-is_array-function/

MODIFIER: aussi, si vous utilisez déjà JQuery dans votre projet, vous pouvez utiliser sa fonction $ .isArray ().


16
2018-01-23 18:56



Comme le dit MDN ici:

utilisation Array.isArray ou Object.prototype.toString.call à différencier   objets réguliers des tableaux

Comme ça:

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

  • Array.isArray(arr)


13
2017-09-14 21:02