J'essaie d'écrire une fonction qui accepte soit une liste de chaînes de caractères, soit une seule chaîne. S'il s'agit d'une chaîne, je veux la convertir en un tableau contenant un seul élément. Ainsi, je peux boucler dessus sans craindre une erreur.
Comment vérifier si la variable est un tableau ?
J'ai rassemblé les différentes solutions ci-dessous et créé un [jsperf test] (http://jsperf.com/js-isarray-comparison).
La méthode donnée dans la norme ECMAScript pour trouver la classe d'un objet est d'utiliser la méthode toString
de Object.prototype
.
if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
alert( 'Array!' );
}
Vous pouvez aussi utiliser typeof
pour tester s'il s'agit d'une chaîne :
if( typeof someVar === 'string' ) {
someVar = [ someVar ];
}
Si vous ne vous souciez pas des performances, vous pouvez simplement faire un concat
vers 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
}
Consultez le [traitement approfondi][1] du blog de [@T.J. Crowder][2], tel que publié dans son commentaire ci-dessous.
Consultez ce [benchmark][3] pour vous faire une idée de la méthode la plus performante : http://jsben.ch/#/QgYAV
De [@Bharath][4] convertir une chaîne de caractères en tableau en utilisant Es6 pour la question posée :
const convertStringToArray = (object) => {
return (typeof object === 'string') ? Array(object) : object
}
supposez :
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']
[1] : http://blog.niftysnippets.org/2010/09/say-what.html [2] : https://stackoverflow.com/users/157247/t-j-crowder [3] : http://jsben.ch/#/QgYAV [4] : https://stackoverflow.com/users/8432239/bharath?tab=profile
Si les deux seuls types de valeurs qui peuvent être passés à cette fonction sont une chaîne ou un tableau de chaînes, restez simple et utilisez un contrôle typeof
pour la possibilité de chaîne :
function someFunc(arg) {
var arr = (typeof arg == "string") ? [arg] : arg;
}