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')?
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')?
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ć, carrota innym razem bananai 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 ich keys, a nie na możliwości uzyskania nthelementu obiektu.
[]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"
Object.keysdziała świetnie. Muszę tylko znaleźć sposób, aby działał na IE8 i 7, ponieważ pojawił się tylko w IE9.
Object.keysgo 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
'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 Stefanova
var myObj = {a: 1, b: 2, c: 3}, lastProperty;
for (lastProperty in myObj);
lastProperty;
//"c";
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"
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]);
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:
Wszystkie nowoczesne implementacje ECMAScript wykonują iterację po właściwościach obiektów w kolejności, w jakiej zostały zdefiniowane
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.
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 dictma gwarancji, że klucze są w porządku.
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()]
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'
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
Niech objbędzie twoim przedmiotem. Wykonawca:
(_ => _[Object.keys(_).pop()])( obj )
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'