Jeśli mam obiekt taki jak:
{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }
Jeśli nie wiem z góry, że lista idzie do 'c', inaczej niż w pętli przez obiekt, czy istnieje sposób na uzyskanie ostatniej pozycji w obiekcie (np. 'carrot'
)?
javascript
object
sprugman
źródło
źródło
Odpowiedzi:
Nie. Porządek nie jest gwarantowany w JSON i większości innych struktur danych typu klucz-wartość, dlatego ostatnia pozycja może czasami być,
carrot
a innym razembanana
i tak dalej. Jeśli musisz polegać na zamawianiu, najlepiej jest wybrać tablice. Siła struktur danych klucz-wartość polega na dostępie do wartości poprzez ichkeys
, a nie na możliwości uzyskanianth
elementu obiektu.źródło
[]
jest to naprawdę obiekt. JS nie ma tablic asocjacyjnych jako takich, tablice mają indeksowany dostęp i sekwencję; obiekty mają asocjacyjny dostęp do właściwości, niesekwencyjny.Tak, jest sposób na użycie
Object.keys(obj)
. Jest to wyjaśnione na tej stronie :var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]
Jeśli chcesz uzyskać wartość ostatniego obiektu, możesz to zrobić:
fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"
źródło
Object.keys
działa świetnie. Muszę tylko znaleźć sposób, aby działał na IE8 i 7, ponieważ pojawił się tylko w IE9.Object.keys
go wielokrotnie, aby stwierdzić, że właściwości zostały faktycznie uporządkowane losowo. Rzeczywista kolejność właściwości różni się od tego, co jest wyświetlane po zalogowaniu się do konsoli przeglądarki. Po zalogowaniu się do konsoli przeglądarki właściwości są automatycznie zmieniane i wyświetlane alfabetycznie / numerycznie, co zdecydowanie powoduje pewne zamieszanie.last = Object.keys(obj)[Object.keys(obj).length-1];
gdzie obiekt jest twoim obiektem
źródło
'c'
w tym przypadku), ale pytanie jest sformułowane w sposób, który sugeruje, że pytający szuka ostatniej wartości ('carrot'
). To również tak naprawdę nie dodaje niczego, co nie jest jeszcze objęte odpowiedzią Kristiny Stefanovavar myObj = {a: 1, b: 2, c: 3}, lastProperty; for (lastProperty in myObj); lastProperty; //"c";
źródło: http://javascriptweblog.wordpress.com
źródło
for (firstProperty in myObj) { break; };
Rozwiązanie wykorzystujące składnię przydziału destrukturyzacji ES6:
var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; var { [Object.keys(temp).pop()]: lastItem } = temp; console.info(lastItem); //"carrot"
źródło
Możesz tego spróbować. To zapisze ostatni element. Tutaj trzeba przekonwertować obj na tablicę. Następnie użyj
pop()
funkcji tablicowej , która zwróci ostatni element z przekonwertowanej tablicy.var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }; var last = Object.keys(obj).pop(); console.log(last); console.log(obj[last]);
źródło
Jeśli chodzi o kolejność właściwości obiektów w Javascript, podam tylko link do tej odpowiedzi:
Kolejność elementów w pętli „for (… in…)”
Konkretnie:
Zatem każda inna odpowiedź jest prawidłowa, nie ma oficjalnego gwarantowanego porządku sprzeciwu dotyczącego własności. Jednak w praktyce tak jest (pomijając wszelkie błędy, które w naturalny sposób mogą zepsuć nawet oficjalnie określone zachowanie).
Ponadto faktyczna kolejność wyliczania właściwości obiektów prawdopodobnie zostanie skodyfikowana w przyszłych specyfikacjach EMCAScript.
Jednak w tej chwili nie pisałbym wokół tego kodu, głównie dlatego, że nie ma wbudowanych narzędzi, które pomogłyby w uporządkowaniu właściwości obiektów. Mógłbyś napisać własną, ale w końcu zawsze będziesz przeglądał każdą właściwość obiektu, aby określić jej położenie.
W związku z tym odpowiedź na twoje pytanie brzmi: nie , nie ma innego sposobu niż zapętlenie obiektu.
źródło
Jeśli kolejność ma znaczenie, użyj tablicy, a nie literału obiektu.
list = ['apple', 'banana', 'carrot'];
Albo coś w stylu
dict = { 'a' : ['apple', 'awesome'], 'b' : ['best friend'] };
Lub nawet..
dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];
Nie
dict
ma gwarancji, że klucze są w porządku.źródło
Inne odpowiedzi zbytnio mi to komplikują.
let animals = { a: 'dog', b: 'cat', c: 'bird' } let lastKey = Object.keys(animals).pop() let lastValue = animals[Object.keys(animals).pop()]
źródło
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'
źródło
Możesz też skorzystać z
Object.values()
metody:Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"
źródło
Mapuj obiekt w JavaScript . To ma już około 3 lat. Ta struktura danych mapy zachowuje kolejność, w jakiej elementy są wstawiane. Dzięki temu odzyskanie ostatniego elementu faktycznie spowoduje wstawienie ostatniego elementu do mapy
źródło
Niech
obj
będzie twoim przedmiotem. Wykonawca:(_ => _[Object.keys(_).pop()])( obj )
źródło
jeśli masz na myśli dostać ostatni klucz alfabetycznie, możesz (gwarantować):
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'
źródło