JavaScript: détecter si l'argument est la matrice de la place de l'objet (Node.JS)
Comment détecter si l'argument est un tableau car typeof []
retourne 'object'
et je tiens à distinguer entre les tableaux et les objets.
Il est possible que l'objet ressemble {"0":"string","1":"string","length":"2"}
mais je ne veux pas qu'il vienne comme un tableau si il est en fait un objet ressemblant à un tableau.
JSON.parse
et JSON.stringify
sont en mesure de faire cette distinction. Comment puis-je le faire?
Je suis en utilisant Node.JS qui est basé sur le V8 de même que Chrome.
Vous devez vous connecter pour publier un commentaire.
Array.isArray
natif V8 fonction. C'est rapide, c'est toujours correct. Cela fait partie de l'ES5.
arr instanceof Array
Vérifie si l'objet a été faite avec le constructeur array.
_.isArray //trait de soulignement méthode.
Une méthode de trait de soulignement. Voici un extrait de la source
Cette méthode prend un objet et appelle la
Object.prototype.toString
méthode. Ce sera toujours le retour[object Array]
pour les tableaux.Dans mon expérience personnelle, je trouve demandant la
toString
méthode est la plus efficace, mais elle n'est pas à court ou lisible queinstanceof Array
, ni est-il aussi rapide queArray.isArray
mais c'est ES5 code et j'ai tendance à éviter de l'utiliser pour la portabilité.Personnellement, je ne recommande que vous essayez d'utiliser
soulignement
, qui est une bibliothèque commune de l'utilitaire de méthodes. Il a beaucoup de fonctions utiles à SEC de votre code.util
bibliothèque -require('util').isArray(arr)
nodejs.org/api/util.html#util_util_isarray_objectarr instanceof Array
échoue. Cependant, leArray.isArray()
fonctionne très bien.Essayez ce code:
Comment sur:
En V8 de Chrome-je obtenir
Je ressemble à cette question a plusieurs bonnes réponses, mais pour être complet, je voudrais ajouter une autre option, qui n'ont pas été suggéré plus tôt.
Afin de vérifier si quelque chose est un tableau, vous pouvez utiliser Node.js
util
module natif et sonisArray()
fonction.Exemple:
Avec cette méthode vous n'avez pas à vous soucier de JS normes mises en œuvre par le V8 comme il montrera toujours la bonne réponse.
util.isArray()
actuellement procurations àArray.isArray()
: github.com/joyent/node/blob/...Essayer de cette façon:
console.journal(de l'Objet.le prototype.toString.appel(arg).replace(/^[objet (.+)]$/, '$1').toLowerCase())