문제

고려하다:

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));
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top