il modo migliore per ottenere la chiave di un object javascript chiave / valore

Se ho un object JS come:

var foo = { 'bar' : 'baz' } 

Se so che foo ha quella struttura chiave / valore, ma non conosco il nome della chiave, qual è il modo più semplice per ottenerlo? for ... in ? $.each() ? Spero ci sia qualcosa di meglio ….

Se si desidera ottenere tutte le chiavi, ECMAScript 5 ha introdotto Object.keys . Questo è supportato solo dai nuovi browser, ma la documentazione MDC fornisce un’implementazione alternativa (che usa anche for...in btw):

 if(!Object.keys) Object.keys = function(o){ if (o !== Object(o)) throw new TypeError('Object.keys called on non-object'); var ret=[],p; for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p); return ret; } 

Ovviamente se vuoi entrambi, chiave e valore, allora for...in è l’unica soluzione ragionevole.

Si eseguirà l’iterazione all’interno dell’object con un ciclo for:

 for(var i in foo){ alert(i); // alerts key alert(foo[i]); //alerts key's value } 

O

 Object.keys(foo) .forEach(function eachKey(key) { alert(key); // alerts key alert(foo[key]); // alerts value }); 

È ansible accedere a ciascuna chiave singolarmente senza iterare come in:

 var obj = { first: 'someVal', second: 'otherVal' }; alert(Object.keys(obj)[0]); // returns first alert(Object.keys(obj)[1]); // returns second 

Dato il tuo object:

 var foo = { 'bar' : 'baz' } 

Per ottenere bar , utilizzare:

 Object.keys(foo)[0] 

Per ottenere baz , usa:

 foo[Object.keys(foo)[0]] 

Supponendo un singolo object

Stavo avendo lo stesso problema e questo è ciò che ha funzionato

 //example of an Object var person = { firstName:"John", lastName:"Doe", age:50, eyeColor:"blue" }; //How to access a single key or value var key = Object.keys(person)[0]; var value = person.firstName; 

Non vedo nient’altro che for (var key in foo) .

 // iterate through key-value gracefully const obj = { a: 5, b: 7, c: 9 }; for (const [key, value] of Object.entries(obj)) { console.log(`${key} ${value}`); // "a 5", "b 7", "c 9" } 

Segnala MDN

Non c’è modo diverso da for ... in . Se non vuoi usarlo (forse perché è marginalmente inefficiente dover testare hasOwnProperty su ogni iterazione?) Usa un costrutto diverso, ad esempio una serie di kvp:

 [{ key: 'key', value: 'value'}, ...] 

Il modo più semplice è usare semplicemente Underscore.js:

chiavi

_.keys (object) Richiama tutti i nomi delle proprietà dell’object.

_.keys ({uno: 1, due: 2, tre: 3}); => [“uno”, “due”, “tre”]

Sì, hai bisogno di una libreria in più, ma è così facile!

Dato che hai menzionato $.each() , ecco un approccio pratico che potrebbe funzionare in jQuery 1.6+:

 var foo = { key1: 'bar', key2: 'baz' }; // keys will be: ['key1', 'key2'] var keys = $.map(foo, function(item, key) { return key; }); 

utilizzare per ogni ciclo per accedere alle chiavi in ​​Object o Maps in javascript

 for(key in foo){ console.log(key);//for key name in your case it will be bar console.log(foo[key]);// for key value in your case it will be baz } 

Nota: puoi anche usare

Object.keys (foo);

ti darà come questo risultato:

[bar];

Object.keys () Il metodo Object.keys () restituisce una matrice delle proprietà enumerabili di un dato object, nello stesso ordine di quello fornito da un ciclo for … in (la differenza è che un ciclo for-in enumera le proprietà anche nella catena del prototipo).

 var arr1 = Object.keys(obj); 

Object.values ​​() Il metodo Object.values ​​() restituisce una matrice di valori di proprietà enumerabili di un object specifico, nello stesso ordine di quello fornito da un ciclo for … in (la differenza è che un ciclo for-in enumera proprietà nella catena del prototipo pure).

 var arr2 = Object.values(obj); 

Per ulteriori informazioni, vai qui

Questo è il modo più semplice e semplice. Ecco come lo facciamo.

 var obj = { 'bar' : 'baz' } var key = Object.keys(obj)[0]; var value = obj[key]; console.log("key = ", key) // bar console.log("value = ", value) // baz 

Beh $.each è un costrutto di libreria, mentre for ... in è nativo js, ​​che dovrebbe essere migliore

Un solo rivestimento per te:

 const OBJECT = { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4' }; const value = 'value2'; const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)]; window.console.log(key); // = key2 

per mostrare come una stringa, usa semplicemente:

 console.log("they are: " + JSON.stringify(foo));