40 votos

En javascript ¿cómo podemos identificar si un objeto es un Hash o un arreglo de discos?

El resultado de mi llamada JSON puede ser una matriz o un Hash. ¿Cómo se puede distinguir entre estos dos?

62voto

Gary Puntos 227

puede utilizar la propiedad constuctor de la salida:

if(output.constructor == Array){
}
else if(output.constructor == Object){
}

Edit: Es el año 2014 ahora y mi respuesta de 2008 todavía obtiene + 1 cada pocas semanas, por lo que merece una actualización.

Los navegadores modernos soportan Array.isArray método. Ver MDN para la documentación y un polyfill.

20voto

Borgar Puntos 12493

Es objeto de:

function isObject ( obj ) {
   return obj && (typeof obj  === "object");
}

Es la matriz:

function isArray ( obj ) { 
  return isObject(obj) && (obj instanceof Array);
}

Porque las matrices son objetos que querrá comprobar si una variable es una matriz en primer lugar, y entonces si es un objeto:

if (isArray(myObject)) {
   // do stuff for arrays
}
else if (isObject(myObject)) {
   // do stuff for objects
}

6voto

insin Puntos 19509

¿Quisiste decir "Objeto" en vez de "Hash"?

>>> var a = [];
>>> var o = {};
>>> a instanceof Array
true
>>> o instanceof Array
false

0voto

Sergey Ilinsky Puntos 16803

Comprobación de "constructor" de la propiedad en el objeto. Es la Matriz es un array de objetos.


var a = {
'b':{length:0},
'c':[1,2]
}

si (a.c.constructor == Array)
 for (var i = 0; i < a.c.longitud; i++)
alert(un.c[i]);
otra cosa
 for (var s en una.b);
alert(un.b[s]);

0voto

neoneye Puntos 11545

Hice una función para determinar si se trata de un diccionario.

exports.is_dictionary = function (obj) {
    if(!obj) return false;
    if(Array.isArray(obj)) return false;
    if(obj.constructor != Object) return false;
    return true;
};

// return true
test.equal(nsa_utils.is_dictionary({}), true);
test.equal(nsa_utils.is_dictionary({abc:123, def:456}), true);

// returns false
test.equal(nsa_utils.is_dictionary([]), false);
test.equal(nsa_utils.is_dictionary([123, 456]), false);
test.equal(nsa_utils.is_dictionary(null), false);
test.equal(nsa_utils.is_dictionary(NaN), false);
test.equal(nsa_utils.is_dictionary('hello'), false);
test.equal(nsa_utils.is_dictionary(0), false);
test.equal(nsa_utils.is_dictionary(123), false);

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X