2016-05-29 23 views
5

Capisco che non ci sono associative arrays in javascript, solo objects.come creare un array associativo nella notazione letterale Javascript

Tuttavia posso creare un array con le chiavi di stringa utilizzando bracket notation come questo:

var myArray = []; 
myArray['a'] = 200; 
myArray['b'] = 300; 
console.log(myArray); //prints [a: 200, b: 300] 

così, voglio fare la stessa cosa senza usare bracket notation

var myNewArray = [a: 200, b: 300]; //getting error - Unexpected token: 

questo non funziona neanche

var myNewArray = ['a': 200, 'b': 300]; //same error, why can I not create? 
+0

Che cosa è sbagliato con l'utilizzo di questo? 'var myNewArray = {'a': 200, 'b': 300};' – MT0

+0

@ MT0 - funziona, ma sto cercando di capire perché non funziona con la notazione array []? –

+4

Vuoi un oggetto, non un array. – SLaks

risposta

4

Javascript non ha array associativi, solo gli oggetti. Persino gli array JS sono fondamentalmente solo oggetti, solo con la particolarità che i nomi delle proprietà sono numeri (0,1, ...).

in modo da guardare il codice prima:

var myArray = []; // creating a new array object 
myArray['a'] = 200; // setting the attribute a to 200 
myArray['b'] = 300; // setting the attribute b 300 

La sua importante capire che myArray['a'] = 200; è identico-myArray.a = 200;!

Quindi, per iniziare con quello che si desidera: Non è possibile creare un array javascript e non passare nessun numero di attributi ad esso in una dichiarazione.

Ma questo probabilmente non è quello che ti serve! Probabilmente hai solo bisogno di un oggetto JS, che è fondamentalmente lo stesso di un array, dizionario o mappa associativo in altre lingue: mappa le stringhe sui valori. E ciò può essere fatto facilmente:

var myObj = {a: 200, b: 300}; 

Ma è importante capire che questo differisce leggermente da quello che hai fatto. myObj instance of Array restituirà false, perché myObj non è un antenato di Array nella catena del prototipo.

+0

javascript ha matrici di prima classe, quindi no –

+0

no cosa? sono di prima classe ma sono ancora implementati come oggetti. Vedi '[] instanceof Object === true'! – Lux

+0

sì, tutto è un oggetto in JS land, ad eccezione di null –

1

Beh, si sta creando una matrice, che è in realtà un oggetto.

var arr = []; 
arr.map; 
// function(..) 
arr['map']; 
// function(..) 

arr['a'] = 5; 

console.log(arr instanceof Object); // true 

È possibile aggiungere campi e funzioni a arr. Non "insert" loro di matrice anche se (come arr.push(...))

è possibile fare riferimento a un oggetto con i campi [] sintassi

1

Le matrici e gli oggetti sono cose diverse.

Per un oggetto, è possibile fare cose come:

var obj = { "property1": "value1" }; 
obj.property2 = "value2"; 

Per gli array, devi fare questo:

var arr = []; 
arr[0] = "value"; 
0

È possibile utilizzare Mappa:

var arr = new Map([ 
    ['key1', 'User'], 
    ['key2', 'Guest'], 
    ['key3', 'Admin'], 
]); 
var res = arr.get('key2'); 
console.log(res); // The value is 'Guest'