[javascript] 인덱스로 숫자가 아닌 객체 속성에 액세스 하시겠습니까?

다음과 같은 배열이있는 경우 :

var arr = ['one','two','three'];

이렇게하면 다른 부분에 액세스 할 수 있습니다.

console.log(arr[1]);

키가 아닌 순서로 객체 속성에 액세스하려면 어떻게해야합니까?

예:

var obj = {
    'something' : 'awesome',
    'evenmore'  : 'crazy'
},
jbo = {
    'evenmore'  : 'crazy',
    'something' : 'awesome'
};

속성 이름을 명시 적으로 사용하지 않고 각 개체의 첫 번째 속성 ( “something”from obj및 “evenmore”from-)을 어떻게 얻 jbo습니까?

자, 여러분 중 일부는 내가 다음과 같은 것을 추구한다고 생각하는 것 같습니다.

console.log(obj['something']);

이것은 사실이 아닙니다. 가능한 경우 첫 번째 예와 마찬가지로 인덱스를 대상으로 특별히 찾고 있습니다.



답변

“가능한 경우 첫 번째 예와 마찬가지로 색인을 구체적으로 타겟팅하려고합니다.”

아니요, 불가능합니다.

가장 가까운 방법은 객체 키의 배열을 가져 와서 다음을 사용하는 것입니다.

var keys = Object.keys( obj );

…하지만 정의한 순서대로 키가 반환된다는 보장은 없습니다. 따라서 다음과 같이 보일 수 있습니다.

keys[ 0 ];  // 'evenmore'
keys[ 1 ];  // 'something'


답변

이 작업을 수행 할 수있는 유일한 방법은를 사용하여 속성을 제공하는 메서드를 만드는 것입니다 Object.keys();.

var obj = {
    dog: "woof",
    cat: "meow",
    key: function(n) {
        return this[Object.keys(this)[n]];
    }
};
obj.key(1); // "meow"

데모 : http://jsfiddle.net/UmkVn/

이것을 사용하는 모든 객체로 확장 할 수 Object.prototype;있지만 일반적으로 권장되지는 않습니다.

대신 함수 도우미를 사용하세요.

var object = {
  key: function(n) {
    return this[ Object.keys(this)[n] ];
  }
};

function key(obj, idx) {
  return object.key.call(obj, idx);
}

key({ a: 6 }, 0); // 6


답변

Object.values()을 사용하지 않으려면 방법을 사용할 수 있습니다 Object.keys().

Object.keys()주어진 객체의 고유 한 열거 가능한 속성의 배열을 반환하는 메서드와는 반대로 , 예를 들면 다음과 같습니다.

const object1 = {
 a: 'somestring',
 b: 42,
 c: false
};

console.log(Object.keys(object1));

다음 배열을 인쇄합니다.

[ 'a', 'b', 'c' ]

Object.values()메서드는 지정된 객체의 고유 한 열거 가능한 속성 배열을 반환합니다 values.

따라서 동일한 객체가 있지만 대신 값을 사용하는 경우

const object1 = {
 a: 'somestring',
 b: 42,
 c: false
};

console.log(Object.values(object1));

다음 배열을 얻을 수 있습니다.

[ 'somestring', 42, false ]

따라서 액세스하려면 object1.b 싶지만 대신 색인을 사용하려면 다음을 사용할 수 있습니다.

Object.values(object1)[1] === 42

이 방법에 대한 자세한 내용은 여기에서 읽을 수 있습니다 .


답변

var obj = {
    'key1':'value',
    '2':'value',
    'key 1':'value'
}

console.log(obj.key1)
console.log(obj['key1'])
console.log(obj['2'])
console.log(obj['key 1'])

// will not work
console.log(obj.2)

편집하다:

“가능한 경우 첫 번째 예와 마찬가지로 색인을 구체적으로 타겟팅하려고합니다.”

사실 ‘색인’이 핵심입니다. 키의 위치를 ​​저장하려면이를 처리 할 사용자 지정 개체를 만들어야합니다.


답변

jquery로 다음과 같이 할 수 있습니다.

var arr = $.map(obj,function(value, key) {
    return value;
});
alert(obj[0]);


답변

키 배열을 가져 와서 뒤집은 다음 루프를 실행합니다.

  var keys = Object.keys( obj ).reverse();
  for(var i = 0; i < keys.length; i++){
    var key = keys[i];
    var value = obj[key];
    //do stuff backwards
  }


답변

개체 필드로 채워진 배열을 만들고 배열의 인덱스를 사용하고이를 통해 개체 속성에 액세스 할 수 있습니다.

propertiesName:['pr1','pr2','pr3']

this.myObject[this.propertiesName[0]]