객체의 첫 번째 색인을 얻습니다
-
05-09-2019 - |
문제
고려하다:
var object = {
foo: {},
bar: {},
baz: {}
}
어떻게해야합니까?
var first = object[0];
console.log(first);
분명히 첫 번째 색인이 명명 되었기 때문에 작동하지 않습니다. foo
, 아니다 0
.
console.log(object['foo']);
작동하지만 Foo라는 이름을 모르겠습니다. 그것은 무엇이든 명명 될 수 있습니다. 나는 단지 첫 번째를 원한다.
해결책
객체의 순서가 중요하다면 JSON 스키마를 수정하여 객체를 배열에 저장해야합니다.
[
{"name":"foo", ...},
{"name":"bar", ...},
{"name":"baz", ...}
]
또는 아마도 :
[
["foo", {}],
["bar", {}],
["baz", {}]
]
Ben Alpert가 지적했듯이, JavaScript 객체의 속성은 변하지 않으며, 객체 문자 그럴에 지정된 것과 동일한 순서로 열거 될 것으로 예상하면 코드가 고장됩니다. "첫 번째"속성이 없습니다.
다른 팁
재미를 위해 이것은 JS 1.8.5에서 작동합니다
var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"
이것은 당신이 볼 수있는 것과 같은 순서와 일치합니다.
for (o in obj) { ... }
간결한 것을 원한다면 시도해보십시오.
for (first in obj) break;
alert(first);
함수로 래핑 :
function first(obj) {
for (var a in obj) return a;
}
그들은 아니야 진짜 주문했지만 할 수 있습니다.
var first;
for (var i in obj) {
if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
first = obj[i];
break;
}
}
그만큼 .hasOwnProperty()
프로토 타입 객체를 무시하는 것이 중요합니다.
JavaScript 객체가 변하지 않기 때문에 첫 번째는 제공하지 않지만 경우에 따라 괜찮습니다.
myObject[Object.keys(myObject)[0]]
객체의 첫 번째 키는 사용할 수 있습니다
console.log(Object.keys(object)[0]);//print key's name
가치를 위해
console.log(object[Object.keys(object)[0]]);//print key's value
JavaScript의 "해시"(객체)로 볼 수있는 첫 번째 요소를 얻을 방법은 없습니다. 가장 좋은 방법은 키를 배열에 저장하는 것입니다.
var keys = ["foo", "bar", "baz"];
그런 다음 적절한 가치를 얻으려면 다음을 사용하십시오.
object[keys[0]]
ES6
const [first] = Object.keys(obj)
밑줄을 사용하면 _.pairs를 사용하여 첫 번째 개체 항목을 다음과 같이 키 값 쌍으로 가져올 수 있습니다.
_.pairs(obj)[0]
그런 다음 키는 추가로 사용할 수 있습니다 [0]
첨자, 값 [1]
어제 같은 문제가있었습니다. 나는 다음과 같이 해결했다 :
var obj = {
foo:{},
bar:{},
baz:{}
},
first = null,
key = null;
for (var key in obj) {
first = obj[key];
if(typeof(first) !== 'function') {
break;
}
}
// first is the first enumerated property, and key it's corresponding key.
가장 우아한 솔루션은 아니며 다른 브라우저에서 다른 결과를 산출 할 수 있다고 확신합니다 (즉, 사양에 따라 정의 된 것과 동일한 순서로 속성을 열거 할 필요는 없음). 그러나 나는 내 물건에 단일 속성 만 있었으므로 문제가 없었습니다. 방금 첫 번째 키가 필요했습니다.
당신은 다음과 같은 일을 할 수 있습니다 :
var object = {
foo:{a:'first'},
bar:{},
baz:{}
}
function getAttributeByIndex(obj, index){
var i = 0;
for (var attr in obj){
if (index === i){
return obj[attr];
}
i++;
}
return null;
}
var first = getAttributeByIndex(object, 0); // returns the value of the
// first (0 index) attribute
// of the object ( {a:'first'} )
객체의 첫 번째 키를 얻으려면
const myObject = {
'foo1': { name: 'myNam1' },
'foo2': { name: 'myNam2' }
}
const result = Object.keys(myObject)[0];
// result will return 'foo1'
기반 CMS 대답. 나는 값을 직접 얻지 못하고 대신에 인덱스에서 키를 가져 와서 이것을 사용하여 값을 얻습니다.
Object.keyAt = function(obj, index) {
var i = 0;
for (var key in obj) {
if ((index || 0) === i++) return key;
}
};
var obj = {
foo: '1st',
bar: '2nd',
baz: '3rd'
};
var key = Object.keyAt(obj, 1);
var val = obj[key];
console.log(key); // => 'bar'
console.log(val); // => '2nd'
내 해결책 :
Object.prototype.__index = function(index)
{
var i = -1;
for (var key in this)
{
if (this.hasOwnProperty(key) && typeof(this[key])!=='function')
++i;
if (i >= index)
return this[key];
}
return null;
}
aObj = {'jack':3, 'peter':4, '5':'col', 'kk':function(){alert('hell');}, 'till':'ding'};
alert(aObj.__index(4));