자바 스크립트 객체의 마지막 항목 가져 오기


95

다음과 같은 개체가있는 경우 :

{ 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' }

객체를 반복하는 것 외에 목록이 'c'까지 올라간다는 것을 미리 알지 못하는 경우 객체의 마지막 항목을 가져올 수있는 방법이 'carrot'있습니까 (예 :) ?


그건 좋은 질문이야. 또한 객체를 반복하는 것 외에 어떻게 비어 있는지 확인할 수 있습니까?
Lukas Eder

2
속성 이 "항목"이 아닙니다. 아니요, 속성 순서가 정의되지 않았습니다.
무료 컨설팅

마지막 속성 그가 의미, 내가 말할 것
KooiInc

답변:


67

아니요. JSON 및 대부분의 다른 키-값 데이터 구조에서는 순서가 보장되지 않으므로 마지막 항목은 때때로있을 수 carrot있고 다른 때는 계속 될 수 있습니다 banana. 주문에 의존 해야하는 경우 가장 좋은 방법은 어레이를 사용하는 것입니다. 키-값 데이터 구조의 힘은 객체 keysnth항목 을 가져올 수 없다는 것이 아니라으로 값에 액세스하는 데 있습니다.


1
이 완전히 정답에 대한 확장으로. 객체는 배열이 아닙니다. 배열 마커를 사용하여 JS에서 연관 배열을 생성하더라도 []실제로는 객체입니다. JS에는 이와 같은 연관 배열이 없으며 배열에는 인덱스 액세스 및 시퀀스가 ​​있습니다. 객체에는 비 순차적 연관 속성 액세스 권한이 있습니다.
Orbling

3
나는 그들이 순서를 가지고 있다고 보장되지는 않는다는 것을 알고 있지만, 내가 물체의 창조를 통제 할 수 있다면, 실질적인 관점에서 그것들이 특정한 순서에 있는지 확인할 수 있습니다. 그러나 질문에 대한 답은 "아니오"입니다. :)
sprugman 2010

2
@sprugman : Chrome에는 없습니다. 이 주제에 대해 오랫동안 열띤 논쟁이 벌어졌습니다. code.google.com/p/v8/issues/detail?id=164
Tim Down

223

예, 사용하는 방법이 Object.keys(obj)있습니다. 이 페이지 에서 설명 합니다 .

var fruitObject = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
Object.keys(fruitObject); // this returns all properties in an array ["a", "b", "c"]

마지막 개체의 값을 얻으려면 다음을 수행 할 수 있습니다.

fruitObject[Object.keys(fruitObject)[Object.keys(fruitObject).length - 1]] // "carrot"

8
이것은 Object.keys굉장 하게 작동 하는 받아 들여진 것이어야했습니다 . IE8 및 7에서 작동하도록하는 방법을 찾아야합니다. IE9에서만 표시 되었기 때문입니다.
RaphaelDDL '2013

4
키 대신 값을 반환하는 Object.values ​​(fruitObject)로 직접 수행 한 다음 배열에 pop ()을 수행하여 마지막 요소를 반환 할 수 있습니다.
Yvon Huynh

4
여기서 첫 번째 대답 은 정답입니다. 나는 Object.keys속성이 실제로 무작위로 정렬되었음을 발견하기 위해 계속해서 사용해 보았습니다 . 실제 속성 순서는 브라우저 콘솔에 로그인 할 때 표시되는 것과 다릅니다. 브라우저 콘솔에 로그인하면 속성이 자동으로 재정렬되고 알파벳 / 숫자 순으로 표시되므로 혼란이 발생합니다.
kennsorr

1
JS 사양은 키의 순서를 보장하지 않으며 다른 구현 (엔진)에 따라 다를 수 있습니다. 따라서 임의로 생성 된 (키가 지정된) 개체에 대한 삽입 순서를 보장 할 수 없습니다. Array는 다른 유용한 속성들 사이에 삽입 순서를 보장하기 위해 key가 숫자 인덱스 인 Object 유형입니다.
Ethan Doh

1
선한 사람들은 2010-2013 년에 웹 개발을하는 데 어려움을 겪었습니다 ...
Merc

22
last = Object.keys(obj)[Object.keys(obj).length-1];

여기서 obj는 객체입니다.


1
이것은 마지막 키 ( 'c'이 경우)를 얻지 만 질문은 질문자가 마지막 값 ( 'carrot')을 찾고 있음을 암시하는 방식으로 표현됩니다 . 이것은 또한 정말 이미이 적용되지 않습니다 아무것도 추가하지 않습니다 크리스티나 스테파노바의 답변을
bmaupin


10

ES6의 구조화 할당 구문을 사용하는 솔루션 :

var temp = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var { [Object.keys(temp).pop()]: lastItem } = temp;
console.info(lastItem); //"carrot"


6

이것을 시도 할 수 있습니다. 마지막 항목을 저장합니다. 여기에서 obj를 배열로 변환해야합니다. 그런 다음 pop()변환 된 배열에서 마지막 항목을 반환 하는 배열 함수를 사용 합니다.

var obj = { 'a' : 'apple', 'b' : 'banana', 'c' : 'carrot' };
var last = Object.keys(obj).pop();
console.log(last);
console.log(obj[last]);


5

Javascript의 개체 속성 순서에 관해서는 다음 답변에 연결하겠습니다.

"for (… in…)"루프의 요소 순서

구체적으로 특별히:

ECMAScript의 모든 최신 구현은 정의 된 순서대로 객체 속성을 반복합니다.

따라서 여기에있는 다른 모든 답변은 정확합니다. 객체 속성에 대한 공식적인 보장 된 순서는 없습니다. 그러나 실제로는 (공식적으로 정해진 행동조차도 자연스럽게 망칠 수있는 버그를 제외하고) 있습니다.

또한 객체 속성의 사실상 열거 순서는 향후 EMCAScript 사양에 성문화 될 것입니다.

그래도 현재로서는이 문제에 대한 코드를 작성하지 않을 것입니다. 대부분 개체 속성 순서를 처리하는 데 도움이되는 기본 제공 도구가 없기 때문입니다. 직접 작성할 수 있지만 결국에는 객체의 각 속성을 반복하여 위치를 결정합니다.

귀하의 질문에 대한 대답은 No 이므로 객체를 반복하는 것 외에는 방법이 없습니다.


당신이 말했듯이, 나는 객체 속성 열거에 대한 어떤 순서에도 의존하지 않을 것입니다. 우선, 새로운 ECMAScript 구현은이 사실상의 표준을 따를 의무가 없으므로 특정 순서에 의존하는 코드는 미래를 보장 할 수 없습니다. 또한 모든 현재 브라우저가 동일하게 작동하는 것은 아닙니다. : 크롬 버그 추적기에서이 토론을 참조하십시오 code.google.com/p/v8/issues/detail?id=164을 . 마지막으로, ECMAScript 사양이 조만간이를 표준화 할 것으로 기대하지 않습니다.
Tim Down

5

순서가 중요하다면 객체 리터럴이 아닌 배열을 사용하십시오.

list = ['apple', 'banana', 'carrot'];

또는 같은

dict = {
 'a' : ['apple', 'awesome'],
 'b' : ['best friend']
};

또는..

dict = [{letter:'a', list:['apple', 'awesome']},{letter:'b', list:['best friend']}];

에 대한 키의 dict순서가 전혀 보장되지는 않습니다.


5

다른 답변은 나를 너무 복잡하게 만듭니다.

let animals = {
  a: 'dog',
  b: 'cat',
  c: 'bird'
}

let lastKey = Object.keys(animals).pop()
let lastValue = animals[Object.keys(animals).pop()]

3
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'

1

다음 Object.values()방법을 사용할 수도 있습니다 .

Object.values(fruitObject)[Object.values(fruitObject).length - 1]; // "carrot"

0

자바 스크립트의지도 객체 . 벌써 3 살 정도 됐어요. 이 맵 데이터 구조는 항목이 삽입되는 순서를 유지합니다. 이 마지막 항목을 검색하면 실제로지도에 최신 항목이 삽입됩니다.



0

마지막 키를 알파벳순으로 얻으려면 다음을 수행 할 수 있습니다 (보장).

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'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.