E 'possibile ottenere il nome della proprietà dell'oggetto come stringaottenere l'oggetto nome della proprietà come una stringa
person = {};
person.first_name = 'Jack';
person.last_name = 'Trades';
person.address = {};
person.address.street = 'Factory 1';
person.address.country = 'USA';
mi piacerebbe utilizzarlo in questo modo:
var pn = propName(person.address.country); // should return 'country' or 'person.address.country'
var pn = propName(person.first_name); // should return 'first_name' or 'person.first_name'
Grazie in anticipo
NOTA: questo codice è esattamente quello che sto cercando. Capisco che suoni anche stupidi, ma non lo è.
Questo è quello che voglio fare con esso.
HTML
person = {};
person.id_first_name = 'Jack';
person.id_last_name = 'Trades';
person.address = {};
person.address.id_address = 'Factory 1';
person.address.id_country = 'USA';
extPort.postMessage
(
{
message : MSG_ACTION,
propName(person.first_name): person.first_name
}
};
---------------------- RISPOSTA ------------ -----------
Ottenuto grazie a ibu. Indicò la strada giusta e ho usato una funzione ricorsiva
var res = '';
function propName(prop, value) {
for (var i in prop) {
if (typeof prop[i] == 'object') {
if (propName(prop[i], value)) {
return res;
}
} else {
if (prop[i] == value) {
res = i;
return res;
}
}
}
return undefined;
}
var pn = propName(person, person.first_name); // returns 'first_name'
var pn = propName(person, person.address.country); // returns 'country'
DEMO: http://jsbin.com/iyabal/1/edit
Sono confuso ... perché vuoi che il nome della proprietà restituisca la stessa cosa che hai alimentato? Conosci già il nome della proprietà quindi ... Se stai cercando un modo per iterare attraverso le proprietà, puoi usare la notazione delle parentesi e scorrere i tasti, poiché le proprietà sono anche indici hash – RonaldBarzell
Devi anche passare un riferimento a l'oggetto nella funzione. –
Non automaticamente. La stringa a cui fa riferimento la proprietà 'country' non sa nulla circa l'oggetto' address', e l'oggetto a cui fa riferimento la proprietà 'address' non sa nulla sull'oggetto' person'. –