¿Cómo puedo comprobar si un objeto es una matriz? [duplicar]
Estoy intentando escribir una función que acepte una lista de cadenas o una sola cadena. Si es una cadena, entonces quiero convertirla en una matriz con solo un elemento para poder recorrerla sin temor a cometer un error.
Entonces, ¿cómo verifico si la variable es una matriz?
El método proporcionado en el estándar ECMAScript para encontrar la clase de Objeto es utilizar el toString
método de Object.prototype
.
if(Object.prototype.toString.call(someVar) === '[object Array]') {
alert('Array!');
}
O podrías usar typeof
para probar si es una cadena :
if(typeof someVar === 'string') {
someVar = [someVar];
}
O si no le preocupa el rendimiento, puede simplemente hacer concat
una nueva matriz vacía.
someVar = [].concat(someVar);
También está el constructor que puedes consultar directamente:
if (somevar.constructor.name == "Array") {
// do something
}
Vea un tratamiento completo del blog de TJ Crowder , tal como se publica en su comentario a continuación.
Consulte este punto de referencia para tener una idea de qué método funciona mejor: http://jsben.ch/#/QgYAV
Desde @Bharath , convierta una cadena en una matriz usando ES6 para la pregunta formulada:
const convertStringToArray = (object) => {
return (typeof object === 'string') ? Array(object) : object
}
Suponer:
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']
En los navegadores modernos puedes hacer:
Array.isArray(obj)
( Compatible con Chrome 5, Firefox 4.0, Internet Explorer 9, Opera 10.5 y Safari 5)
Para compatibilidad con versiones anteriores, puede agregar lo siguiente:
// 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 usas jQuery puedes usar jQuery.isArray(obj)
o $.isArray(obj)
. Si usa Underscore.js, puede usar _.isArray(obj)
.
Si no necesita detectar matrices creadas en diferentes marcos, también puede usar instanceof
:
obj instanceof Array
Primero comprobaría si su implementación es compatible isArray
:
if (Array.isArray)
return Array.isArray(v);
También puedes intentar usar el instanceof
operador.
v instanceof Array
jQuery también ofrece un $.isArray()
método:
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>
Este es el más rápido de todos los métodos (se admiten todos los navegadores):
function isArray(obj){
return !!obj && obj.constructor === Array;
}