Se ho un oggetto come:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Se non so in anticipo che l'elenco va fino a "c", oltre a scorrere l'oggetto, c'è un modo per ottenere l'ultimo elemento nell'oggetto (ad esempio 'carrot')?
Se ho un oggetto come:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Se non so in anticipo che l'elenco va fino a "c", oltre a scorrere l'oggetto, c'è un modo per ottenere l'ultimo elemento nell'oggetto (ad esempio 'carrot')?
Risposte:
No. L'ordine non è garantito in JSON e nella maggior parte delle altre strutture di dati chiave-valore, quindi l'ultimo elemento potrebbe a volte essere carrote altre volte essere bananae così via. Se hai bisogno di fare affidamento sull'ordinazione, la soluzione migliore è scegliere gli array. Il potere delle strutture dati chiave-valore risiede nell'accesso ai valori tramite loro keys, non nell'essere in grado di ottenere l' nthelemento dell'oggetto.
[], è in realtà un oggetto. JS non ha array associativi in quanto tali, gli array hanno accesso e sequenza indicizzati; gli oggetti hanno accesso alla proprietà associativa, non sequenziale.
Sì, c'è un modo per usare Object.keys(obj). È spiegato in questa pagina :
var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]
Se vuoi ottenere il valore dell'ultimo oggetto, puoi farlo:
fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"
Object.keysfunziona alla grande. Devo solo trovare un modo per farlo funzionare su IE8 e 7, perché è apparso solo su IE9.
Object.keyspiù e più volte solo per scoprire che le proprietà erano effettivamente ordinate in modo casuale. L'ordine effettivo delle proprietà è diverso da ciò che viene visualizzato quando si accede alla console del browser. Quando si accede alla console del browser, le proprietà vengono automaticamente riordinate e visualizzate in ordine alfabetico / numerico, il che crea sicuramente un po 'di confusione.
last = Object.keys(obj)[Object.keys(obj).length-1];
dove obj è il tuo oggetto
'c'in questo caso) ma la domanda è formulata in un modo che implica che il richiedente sta cercando l'ultimo valore ( 'carrot'). Anche questo non aggiunge davvero nulla che non sia già coperto dalla risposta di Kristina Stefanova
Soluzione che utilizza la sintassi di assegnazione destrutturante di ES6:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"
Per quanto riguarda l'ordine delle proprietà degli oggetti in Javascript, mi limiterò a collegarmi a questa risposta:
Gli elementi vengono ordinati in un ciclo "for (... in ...)"
Nello specifico:
Tutte le moderne implementazioni di ECMAScript ripetono le proprietà degli oggetti nell'ordine in cui sono state definite
Quindi ogni altra risposta qui è corretta, non esiste un ordine ufficiale garantito per le proprietà dell'oggetto. Tuttavia in pratica c'è (salvo eventuali bug che naturalmente possono rovinare anche il comportamento specificato ufficialmente nella pietra).
Inoltre, è probabile che l'ordine di enumerazione de facto delle proprietà degli oggetti venga codificato nelle specifiche EMCAScript future.
Tuttavia, in questo momento non scriverei codice intorno a questo, soprattutto perché non ci sono strumenti incorporati per aiutare a gestire l'ordine delle proprietà degli oggetti. Potresti scrivere il tuo, ma alla fine faresti sempre il loop su ogni proprietà in un oggetto per determinarne la posizione.
In quanto tale, la risposta alla tua domanda è No , non c'è altro modo oltre a scorrere un oggetto.
Usa un array, non un oggetto letterale, se l'ordine è importante.
list = ['apple', 'banana', 'carrot'];
O qualcosa di simile
dict = {
'a' : ['apple', 'awesome'],
'b' : ['best friend']
};
O anche..
dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];
Non dictè affatto garantito che le chiavi siano in ordine.
Puoi provare questo. Questo memorizzerà l'ultimo elemento. Qui è necessario convertire obj in array. Quindi utilizzare la pop()funzione array che restituirà l'ultimo elemento dall'array convertito.
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);
Le altre risposte mi complicano troppo.
let animals = {
a: 'dog',
b: 'cat',
c: 'bird'
}
let lastKey = Object.keys(animals).pop()
let lastValue = animals[Object.keys(animals).pop()]
JSArray = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
document.write(Object.keys(JSArray)[Object.keys(JSArray).length-1]);// writes 'c'
document.write(JSArray[Object.keys(JSArray)[Object.keys(JSArray).length-1]]); // writes 'carrot'
Oggetto mappa in JavaScript . Questo ha già circa 3 anni ormai. Questa struttura dei dati della mappa mantiene l'ordine in cui vengono inseriti gli elementi. Con questo recupero dell'ultimo elemento risulterà effettivamente l'ultimo elemento inserito nella mappa
Lascia che objsia il tuo oggetto. Exec:
(_ => _[Object.keys(_).pop()])( obj )
se intendi ottenere l'ultima chiave in ordine alfabetico, puoi (garantito):
var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var keys = Object.keys(obj);
keys.sort();
var lastkey = keys.pop() // c
var lastvalue = obj[lastkey] // 'carrot'