In javascript come possiamo identificare se un object è un hash o una matrice?

L’output della mia chiamata JSON può essere una matrice o un hash. Come faccio a distinguere tra questi due?

I browser moderni supportano il Array.isArray(obj) .

Vedi MDN per la documentazione e un polyfill.

= risposta originale del 2008 =

puoi usare la proprietà del constuctor del tuo output:

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

È object:

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

È array:

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

Poiché gli array sono oggetti, ti consigliamo di verificare se una variabile è prima un array, e quindi se si tratta di un object:

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

Intendevi “Oggetto” invece di “Hash”?

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

Ho fatto una funzione per determinare se si tratta di un dizionario.

 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); 

Controlla la proprietà “costruttore” sull’object. È una matrice: è un object array.

 var a = {
  'B': {lunghezza: 0},
  'C': [1,2]
 }

 if (acconstructor == Array)
    per (var i = 0; i 

Per l’analisi di json potrebbe tornare utile 🙂

 isArrayHashs = (attr) -> !!attr && attr.constructor == Array && isHash(attr[0]) isHash = (attr) -> !!attr && !$.isNumeric(attr) && attr.constructor == Object 

attr [0]. il costruttore deve essere:

  • Stringa
  • Numerico
  • schieramento
  • Oggetto
  • Non definito