array associativo contro object in javascript

Nel mio script c’è la necessità di creare una tabella hash, ho cercato in google per questo. La maggior parte delle persone consiglia l’object JavaScript per questo scopo. Il problema è che alcune delle chiavi nella tabella hash hanno “.” in loro. Sono in grado di creare facilmente queste chiavi con gli array associativi.

Non capisco perché gli array associativi siano cattivi. La prima cosa che viene menzionata nei siti che ho guardato è la proprietà length. Vengo dallo sfondo Perl, dove ho usato gli hash. Gli usi più comuni erano ottenere il valore da una chiave, controllare se esiste una chiave, eliminare una coppia chiave-valore, aggiungere una coppia chiave-valore. Se questi sono i miei usi comuni, posso usare tranquillamente l’array associativo?

In JavaScript, gli oggetti sono array associativi … non ci sono concetti separati per loro. Puoi anche usare tranquillamente ‘.’ in un nome chiave, ma è ansible accedere solo al valore utilizzando la notazione della parentesi:

var foo = {} foo['bar'] = 'test'; foo['baz.bin'] = 'value'; alert(foo.bar); // shows 'test' alert(foo['baz.bin']); // shows 'value' 

Se li stai già usando e funzionano, sei al sicuro.

In javascript object e array sono praticamente la stessa cosa, con la matrice che ha un po ‘di funzionalità magica (autoupdating length property e così) e prototipi di metodi adatti per gli array. È anche molto più semplice build un object che usare un array associativo:

 var obj = {"my.key": "myValue"}; 

vs

 var obj = []; obj["my.key"] = "myValue"; 

Pertanto non utilizzare mai l’object array per questo ma solo l’object normale.

Alcune funzionalità:

 var obj = {}; //Initialized empty object 

elimina una coppia chiave-valore:

 delete obj[key]; 

controlla se la chiave esiste:

 key in obj; 

ottieni il valore chiave:

 obj[key]; 

aggiungi una coppia di valori chiave:

 obj[key] = value; 

Perché non esiste nulla come gli array associativi integrati in javascript. Ecco perché è cattivo.

In effetti, quando usi qualcosa come:

 theArray["a"] = "hello, world!"; 

Crea semplicemente un PROPERTY chiamato “a” e imposta il suo valore su “ciao, mondo!”. Questo è il motivo per cui la lunghezza è sempre 0 e perché l’output di alert(theArray) è vuoto.

Spero che questo ti aiuti!

In realtà, un “array associativo” è praticamente lo stesso di un “object simile ad un array” in ECMAscript. Anche gli Arrays sono oggetti in ECMAscript, solo con l’eccezione di avere chiavi numeriche (che sono ancora stringhe in background), una proprietà .length insieme ad alcuni metodi ereditati da Array.prototype .

Quindi, un perl hash e un object ECMAscript si comportano allo stesso modo. Potresti non sapere che puoi accedere alle proprietà dell’object non solo tramite un punto, ma anche con parentesi e stringhe, come

 var myObj = { foo: 42 }; myObj.foo; // 42 myObj['foo']; // 42 

sapendo questo, puoi anche usare le chiavi con .

 var myObj = { }; myObj['hello.foo.world'] = 42; 

ovviamente, puoi accedere a quella chiave solo con la notazione della parentesi.

Puoi usare nei nomi delle chiavi sugli oggetti JS (ovvero gli array associativi), se lo desideri, vengono accettati senza problemi. L’inconveniente minore è che non è ansible utilizzare le notazioni di collegamento con i tasti puntati, ad es

 var x = {}; x['hello'] = 'there'; alert(x.hello); 

è perfettamente accettabile e apparirà un avviso con ‘there’ in esso. Ma se usi un nome punteggiato:

 var x = {}; x['this.is'] = 'sparta'; alert(x.this.is); 

fallirà, poiché Javascript cercherà un attributo chiamato this nell’object x, che non esiste. C’è solo l’attributo this.is

Non esiste un array associativo, è solo un object.

 foo.bar; // Equivalent to... foo["bar"]; // Looks like associative array. 

Per comodità di utilizzo dei dati, non ci dovrebbero essere differenze tra un object e un array. Puoi pensarlo come un object o puoi pensarlo come un array associativo. Alla fine, puoi semplicemente pensare a tutto come dati .

  • Per PHP , [] accetta 0, 1 o più elementi (array) e viene chiamato array associativo . È Json nel cappotto di PHP:

    $data = ["message"=>[ "id"=>405, "description"=>"Method not allowed.", "detail"=>[]], "object" => []];

  • Per Javacript , {} accetta 0, 1 o più elementi (array) e si chiama object . Questo formato di dati è JSON:

    data = {"message": { "id":405, "description":"Method not allowed.", "detail" : {}}, "object" : {}};

Li chiamo solo dati . Il modo più semplice per descrivere i dati è Json , o le sue varianti.