Estoy intentando escribir una función que acepte una lista de cadenas o una sola cadena. Si es una cadena, quiero convertirla en un array con un solo elemento. Entonces puedo hacer un bucle sobre ella sin temor a un error.
Entonces, ¿cómo compruebo si la variable es un array?
He redondeado las distintas soluciones que aparecen a continuación y he creado una prueba jsperf.
El método dado en el estándar ECMAScript para encontrar la clase de Object es utilizar el método toString
de Object.prototype
.
if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
alert( 'Array!' );
}
O puedes usar typeof
para comprobar si es un String:
if( typeof someVar === 'string' ) {
someVar = [ someVar ];
}
O si no te preocupa el rendimiento, podrías simplemente hacer un concat
a un nuevo Array vacío.
someVar = [].concat( someVar );
También está el constructor que puedes consultar directamente:
if (somevar.constructor.name == "Array") {
// do something
}
Echa un vistazo a un tratamiento exhaustivo del blog de @T.J. Crowder's, tal y como se publica en su comentario más abajo.
Consulta esta comparativa para hacerte una idea de qué método funciona mejor: http://jsben.ch/#/QgYAV
De @Bharath convertir cadena a array usando Es6 para la pregunta formulada:
const convertStringToArray = (object) => {
return (typeof object === 'string') ? Array(object) : object
}
suponga:
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']
Si los dos únicos tipos de valores que se pueden pasar a esta función son una cadena o una matriz de cadenas, manténgalo simple y utilice una comprobación typeof
para la posibilidad de cadena:
function someFunc(arg) {
var arr = (typeof arg == "string") ? [arg] : arg;
}