Javascript에서 객체의 첫 번째 속성에 액세스하는 방법은 무엇입니까?
객체의 첫 번째 속성에 액세스하는 우아한 방법이 있습니까?
- 당신이 당신의 재산의 이름을 모르는 곳
for .. in
jQuery 와 같은 루프를 사용하지 않고$.each
예를 들어, foo1
foo1의 이름을 모르고 객체 에 액세스해야합니다 .
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'
이를 사용하면 인덱스별로 다른 속성에도 액세스 할 수 있습니다. tho를 조심하십시오! Object.keys
ECMAScript에 따라 반품 주문이 보장되는 것은 아니지만 비공식적으로 모든 주요 브라우저 구현 에 의한 것입니다. 자세한 내용은 https://stackoverflow.com/a/23202095 를 참조하십시오.
for … in
루프를 시도하고 첫 번째 반복 후에 중단하십시오.
for (var prop in object) {
// object[prop]
break;
}
Object.keys
객체의 속성 배열을 가져 오는 데 사용 합니다. 예:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
var keys = Object.keys(example); // => ["foo1", "foo2", "foo3"] (Note: the order here is not reliable)
여기에 문서 및 크로스 브라우저 심이 제공 됩니다 . 그것의 사용의 예는 여기 내 대답 중 다른 하나에서 찾을 수 있습니다 .
편집 : 명확성을 위해 다른 답변에 올바르게 언급 된 내용을 에코하고 싶습니다. 자바 객체의 키 순서는 정의되어 있지 않습니다.
당신은 또한 할 수 있습니다 Object.values(example)[0]
.
단일 규칙 버전 :
var val = example[function() { for (var k in example) return k }()];
"첫번째"속성이 없습니다. 객체 키가 정렬되지 않았습니다.
위해와 그들에 당신이 루프 만약 (var foo in bar)
당신이 그들을 얻을 것이다 어떤 순서지만 향후 변경 될 수 있습니다 (특히 추가하거나 다른 키를 제거하는 경우).
lodash 라이브러리가있는 솔루션 :
_.find(example) // => {name: "foo1"}
그러나 자바 스크립트 VM 구현에 의존하기 때문에 객체 속성 내부 스토리지 순서를 보장 할 수 없습니다.
MDC 에서 정의한 객체 리터럴 은 다음과 같습니다.
중괄호 ({})로 묶여있는 0 개 이상의 속성 이름 쌍 및 개체의 관련 값 목록.
따라서 객체 리터럴은 배열이 아니며 명시적인 이름을 for
사용하거나 in
키워드를 사용하여 루프를 사용하여 속성에 액세스 할 수 있습니다 .
이것은 이전에 여기에서 다루어졌습니다.
first의 개념은 객체 속성에는 적용되지 않으며 for ... in 루프의 순서는 사양에 의해 보장되지 않지만 실제로는 크롬에 중요한 경우를 제외하고 는 확실히 FIFO입니다 ( bug report ). 그에 따라 결정하십시오.
이전 IE 버전에서는 지원되지 않으므로 Object.keys를 사용하지 않는 것이 좋습니다. 그러나 실제로 필요한 경우 위 코드를 사용하여 이전 버전과의 호환성을 보장 할 수 있습니다.
if (!Object.keys) {
Object.keys = (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function (obj) {
if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');
var result = [];
for (var prop in obj) {
if (hasOwnProperty.call(obj, prop)) result.push(prop);
}
if (hasDontEnumBug) {
for (var i=0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
}
}
return result;
}})()};
Firefox (Gecko) 4 (2.0) Chrome 5 Internet Explorer 9 Opera 12 Safari 5 기능
추가 정보 : https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys
그러나 첫 번째 솔루션 만 필요한 경우 다음과 같은 짧은 솔루션을 마련 할 수 있습니다.
var data = {"key1":"123","key2":"456"};
var first = {};
for(key in data){
if(data.hasOwnProperty(key)){
first.key = key;
first.content = data[key];
break;
}
}
console.log(first); // {key:"key",content:"123"}
최고 답변은 전체 배열을 생성 한 다음 목록에서 캡처 할 수 있습니다. 또 다른 효과적인 지름길이 있습니다.
var obj = { first: 'someVal' };
Object.entries(obj)[0][1] // someVal
객체에서 첫 번째 키 이름을 얻으려면 다음을 사용할 수 있습니다.
var obj = { first: 'someVal' };
Object.keys(obj)[0]; //returns 'first'
문자열을 반환하므로 다음과 같은 경우 중첩 된 객체에 액세스 할 수 없습니다.
var obj = { first: { someVal : { id : 1} };
이 솔루션을 사용하면 ID에 액세스 할 수 없습니다.
실제 객체를 얻으려면 가장 좋은 해결책은 다음과 같이 lodash를 사용하는 것입니다.
obj[_.first(_.keys(obj))].id
첫 번째 키의 값을 반환하려면 (첫 번째 키 이름을 정확히 모르는 경우) :
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'
키 이름을 알고 있다면 다음을 사용하십시오.
obj.first
또는
obj['first']
"객체의 첫 번째 속성"에 액세스해야하는 경우 논리에 문제가 있음을 의미 할 수 있습니다. 객체 속성의 순서는 중요하지 않습니다.
객체 (대괄호) 대신 배열을 사용하십시오.
var example = [ {/* stuff1 */}, { /* stuff2 */}, { /* stuff3 */}];
var fist = example[0];
'foo'식별자가 손실됩니다. 그러나 포함 된 객체에 이름 속성을 추가 할 수 있습니다.
var example = [
{name: 'foo1', /* stuff1 */},
{name: 'foo2', /* stuff2 */},
{name: 'foo3', /* stuff3 */}
];
var whatWasFirst = example[0].name;
이것을하지 않는 이유는 무엇입니까?
> example.map(x => x.name);
(3) ["foo1", "foo2", "foo3"]
var obj = { first: 'someVal' };
let firstPropValue = Object.values(obj)[0];
이것은 항상 첫 번째 속성의 값을 반환합니다 (이 경우 'someVal'
'Programing' 카테고리의 다른 글
nullptr은 정확히 무엇입니까? (0) | 2020.02.10 |
---|---|
Babel 6 재생기 런타임이 정의되지 않았습니다 (0) | 2020.02.09 |
기기에서 프레임 워크가 충돌하는 iOS 앱, dyld : 라이브러리가로드되지 않음, Xcode 6 베타 (0) | 2020.02.09 |
힘내 푸시 결과 "인증 실패" (0) | 2020.02.09 |
정보 손실없이 요인을 정수 / 숫자로 변환하는 방법은 무엇입니까? (0) | 2020.02.09 |