Questo sarà "lavoro". (Ma io non lo consiglio)
var a = {};
var b = [1,2,3];
a[b] = 'hello';
// a[b] evaluates to 'hello'
// a[[1,2,3]] evaluates to 'hello'
// a['1,2,3'] evaluates to 'hello'
Funziona perché quando si passa l'array [1,2,3] come il tasto cancelletto (mappa/associative-array), viene convertito alla stringa ' 1,2,3 'prima di eseguire la ricerca hash. Dovrebbe essere adatto alle tue esigenze finché non hai bisogno di due matrici diverse dello stesso valore per mappare a valori hash diversi.
var c = [1,2,3]
// a[c] evaluates to 'hello' even though we never executed a[c] = 'hello'
// but b == c evaluates to false
// b & c are two separate objects with the same values, so when they
// get converted to a string for hashing, they return the same value from the hash
Come è stato detto, avrete bisogno di più di l'hash JavaScript standard, se si desidera utilizzare riferimenti agli oggetti come le chiavi.
Aggiornamento
Sulla base del commento da @speedplane:
Ho il sospetto che JS chiama toString()
sulla matrice quando si passa in una chiave hash. Così si può facilmente verificare che cosa si sta effettivamente andando ad ottenere come chiave:
["x", "y", "z"].toString; // 'x,y,z'
["x,y,z"].toString(); // 'x,y,z'
[1,2,3].toString(); // '1,2,3'
[1,2,'3'].toString(); // '1,2,3'
[[1],[2],[3]].toString(); // '1,2,3'
[["x",1], ["y",2], ["z",3]].toString(); // 'x,1,y,2,z,3'
Così ancora una volta, vi consiglio di non fare questo a meno che davvero capire cosa sta succedendo. E anche allora, non lo farei.
Vuoi dire che vuoi usare un array come ricerca in un hash? – alex
A seconda dei possibili valori di 'program' e' time', potrebbe non essere un problema usare semplicemente la rappresentazione di stringa di '[program, time]' come chiave. Poiché il valore che si utilizza come proprietà viene automaticamente convertito in una stringa, l'utilizzo è immediato. –
come ha detto Rob, personalizzare la chiave come ** "program_time" ** e gestirla da solo – tym1193