[javascript] JavaScript 객체 키 목록 가져 오기

나는 JavaScript 객체를 가지고있다.

var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}

이 객체의 길이와 키 목록을 어떻게 얻을 수 있습니까?



답변

var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
};
var keys = [];

for (var k in obj) keys.push(k);

alert("total " + keys.length + " keys: " + keys);


답변

var obj = {
   key1: 'value1',
   key2: 'value2',
   key3: 'value3',
   key4: 'value4'
}
var keys = Object.keys(obj);
console.log('obj contains ' + keys.length + ' keys: '+  keys);

현재 대부분의 주요 브라우저 에서 지원 됩니다.


답변

Underscore.js는 변환을 매우 깨끗하게 만듭니다.

var keys = _.map(x, function(v, k) { return k; });

편집 : 나는 당신도 이것을 할 수있는 것을 놓쳤다.

var keys = _.keys(x);


답변

파생 된 prototype속성이 아닌 특정 객체에 특정한 키만 원하는 경우 :

function getKeys(obj) {
    var r = []
    for (var k in obj) {
        if (!obj.hasOwnProperty(k))
            continue
        r.push(k)
    }
    return r
}

예 :

var keys = getKeys({'eggs': null, 'spam': true})
var length = keys.length // access the `length` property as usual for arrays


답변

var keys = new Array();
for(var key in obj)
{
   keys[keys.length] = key;
}

var keyLength = keys.length;

객체의 값에 액세스하려면 obj [key];


답변

obj = {'a':'c','b':'d'}

당신은 시도 할 수 있습니다:

[index for (index in obj)] 

이것은 다음을 반환합니다 :

['a','b']

키 목록을 얻거나

[obj[index] for (index in obj)]

가치를 얻기 위해


답변

Anurags 답변은 기본적으로 정확합니다. 그러나 Object.keys(obj)이전 브라우저에서도 지원 하려면 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys 에서 복사 된 아래 코드를 사용할 수 있습니다

. Object.keys(obj)브라우저에서 사용할 수없는 경우 메소드를 추가 합니다.

if (!Object.keys) {
 Object.keys = (function() {
 'use strict';
 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 = [], prop, i;

  for (prop in obj) {
    if (hasOwnProperty.call(obj, prop)) {
      result.push(prop);
    }
  }

  if (hasDontEnumBug) {
    for (i = 0; i < dontEnumsLength; i++) {
      if (hasOwnProperty.call(obj, dontEnums[i])) {
        result.push(dontEnums[i]);
      }
    }
  }
  return result;
};
}());
}