답변:
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'
이를 사용하면 인덱스별로 다른 속성에도 액세스 할 수 있습니다. tho를 조심하십시오! Object.keysECMAScript에 따라 반환 순서가 보장되는 것은 아니지만 비공식적으로 모든 주요 브라우저 구현 에 의한 것입니다. 이에 대한 자세한 내용은 https://stackoverflow.com/a/23202095 를 참조하십시오.
first()이것을 처리 할 수 있거나 비슷한 것이 있습니다.
for … in루프를 시도하고 첫 번째 반복 후에 중단하십시오.
for (var prop in object) {
// object[prop]
break;
}
당신은 또한 할 수 있습니다 Object.values(example)[0].
Object.keys첫 번째 항목을 얻었 기 때문에을 (를) 보다 좋아합니다 .
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)
여기에 제공된 설명서 및 크로스 브라우저 심 . 그것의 사용의 예는 여기 내 대답 중 다른 하나에서 찾을 수 있습니다 .
편집 : 명확성을 위해 다른 답변에 올바르게 언급 된 내용을 에코하고 싶습니다. 자바 객체의 키 순서는 정의되어 있지 않습니다.
단일 규칙 버전 :
var val = example[function() { for (var k in example) return k }()];
for in검사하지 않고 사용하는 것이 위험 할 수 있습니다 hasOwnProperty. 짧고 깔끔하다는 것이 안전한 최적을 의미하지는 않습니다.
"첫번째"속성이 없습니다. 객체 키가 정렬되지 않았습니다.
위해와 그들에 당신이 루프 만약 (var foo in bar)당신이 그들을 얻을 것이다 어떤 순서지만 향후 변경 될 수 있습니다 (특히 추가하거나 다른 키를 제거하는 경우).
lodash 라이브러리가있는 솔루션 :
_.find(example) // => {name: "foo1"}
그러나 자바 스크립트 VM 구현에 의존하기 때문에 객체 속성 내부 스토리지 순서를 보장 할 수 없습니다.
var object = { childIndex: { .. } }; var childObject = _.find(Object);
이것은 이전에 여기에서 다루어졌습니다.
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.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;
Object.prototype.keyswhich 를 사용 하면 객체의 모든 키를 동일한 순서로 반환 할 수 있습니다 . 따라서 첫 번째 객체를 원하면 해당 배열을 가져오고 첫 번째 요소를 원하는 키로 사용하십시오.
const o = { "key1": "value1", "key2": "value2"};
const idx = 0; // add the index for which you want value
var key = Object.keys(o)[idx];
value = o[key]
console.log(key,value); // key2 value2
첫 번째 키를 얻는 더 확실한 방법은 다음과 같습니다.
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
var object2 = {
needThis: 'This is a value of the property',
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
let [first] = Object.keys(example)
let [firstProp] = Object.keys(object2)
console.log(first)
//Prop : needThis, Value: This is a value of the property
console.log(`Prop : ${firstProp}, Value: ${object2[firstProp]}`)
[first]. 사용자가 배열을 답변으로 요청하지 않았습니다. first = Object.keys(example)[0]답을 배열로 감싸지 않고도 똑같이하는 이유는 무엇입니까? 당신은 왜 더 깨끗합니까?