Pregunta Comprobar si el objeto es una matriz


Intento escribir una función que acepte una lista de cadenas o una sola cadena. Si es una cadena, entonces quiero convertirla a una matriz con solo un elemento. Entonces puedo recorrerlo sin temor a un error.

Entonces, ¿cómo puedo verificar si la variable es una matriz?


He redondeado las diversas soluciones a continuación y he creado prueba jsperf.


2138
2018-01-23 18:53


origen


Respuestas:


En los navegadores modernos puedes hacer

Array.isArray(obj)

(Apoyado por Chrome 5, Firefox 4.0, IE 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 un guión bajo puede usar _.isArray(obj)

Si no necesita detectar arrays creados en diferentes marcos, también puede usar instanceof

obj instanceof Array

311
2018-01-06 18:11



El método dado en el estándar ECMAScript para encontrar la clase de Objeto es usar 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 un String:

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

O si no le preocupa el rendimiento, podría simplemente hacer una concat a una nueva matriz vacía

someVar = [].concat( someVar );

También está el constructor que puede consultar directamente:

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

Mira un tratamiento completo de @ T.J. Crowder's blog, como se publicó en su comentario a continuación.

Mira esto punto de referencia para tener una idea de qué método funciona mejor: http://jsben.ch/#/QgYAV

De @Bharath convertir cadena a matriz usando Es6 para la pregunta:

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']

1865
2018-01-23 18:54



Primero verificaría si tu implementación es compatible isArray:

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

También puedes intentar usar el instanceof operador

v instanceof Array

1224
2018-01-23 18:55



jQuery también ofrece una $.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>


283
2018-04-02 12:15



Este es el más rápido entre todos los métodos (todos los navegadores son compatibles):

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

84
2017-12-06 10:12



Array.isArray funciona rápido, pero no es compatible con todas las versiones de navegadores. Entonces puedes hacer una excepción para otros y usar el método universal:

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

31
2017-12-10 17:01



Imagina que tienes este arreglo a continuación:

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

Javascript (navegadores nuevos y más antiguos):

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

o

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

o

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

luego llámalo así:

isArray(arr);

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

Array.isArray(arr);

jQuery:

$.isArray(arr);

Angular:

angular.isArray(arr);

Subrayar y Lodash:

_.isArray(arr);

28
2017-12-27 13:17



Función simple para verificar esto:

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

20
2017-09-04 17:56



Puedes probar este enfoque: http://web.archive.org/web/20100424091244/http://www.ajaxdr.com/code/javascript-version-of-phps-is_array-function/

EDITAR: también, si ya está utilizando JQuery en su proyecto, puede usar su función $ .isArray ().


16
2018-01-23 18:56



Como dice MDN aquí:

utilizar Array.isArray o Object.prototype.toString.call para diferenciar   objetos regulares de matrices

Me gusta esto:

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

  • Array.isArray(arr)


13
2017-09-14 21:02



Puede verificar el tipo de su variable si es una matriz con;

var myArray=[];

if(myArray instanceof Array)
{
....
}

12
2018-01-15 08:58