Ora, questo può essere eccessivo per voi, ma qui è una funzione generica che creerà un oggetto con "chiavi multiple". Quello che effettivamente fa è avere una proprietà reale con il valore effettivo, e quindi definisce getter e setter per inoltrare le operazioni dalle chiavi virtuali alla proprietà effettiva.
function multiKey(keyGroups) {
let obj = {};
let props = {};
for (let keyGroup of keyGroups) {
let masterKey = keyGroup[0];
let prop = {
configurable: true,
enumerable: false,
get() {
return obj[masterKey];
},
set(value) {
obj[masterKey] = value;
}
};
obj[masterKey] = undefined;
for (let i = 1; i < keyGroup.length; ++i) {
if (keyGroup.hasOwnProperty(i)) {
props[keyGroup[i]] = prop;
}
}
}
return Object.defineProperties(obj, props);
}
Questo è meno impreciso quanto ci si aspetterebbe, ha fondamentalmente nessuna penalità prestazioni una volta che l'oggetto viene creato, e si comporta bene con l'enumerazione (for...in
loop) e il controllo di appartenenza (in
operatore). Ecco alcuni esempio di utilizzo:
let test = multiKey([
['north', 'up'],
['south', 'down'],
['east', 'left'],
['west', 'right']
]);
test.north = 42;
test.down = 123;
test.up; // returns 42
test.south; // returns 123
let count = 0;
for (let key in test) {
count += 1;
}
count === 4; // true; only unique (un-linked) properties are looped over
Tratto da my Gist, che si può sborsare.
Questo non è JSON, è solo un oggetto Javascript. – Barmar