programing

객체의 키를 찾으려면 어떻게 해야 합니까?

sourcejob 2022. 11. 5. 17:32
반응형

객체의 키를 찾으려면 어떻게 해야 합니까?

JavaScript에서는 오브젝트가 해시로서 더블인 을 알고 있습니다만, 키를 취득하기 위한 내장 함수를 찾을 수 없었습니다.

var h = {a:'b', c:'d'};

나는 이런 것을 원한다.

var k = h.keys() ; // k = ['a', 'c'];

항목을 반복하고 반환되는 배열에 키를 추가하는 함수를 직접 작성하는 것은 간단하지만, 이를 위한 표준 클리너 방법은 있습니까?

심플한 빌트인 기능인 것이 틀림없다는 생각이 계속 듭니다만, 찾을 수 없습니다!

최신 JavaScript(ECMAScript 5)에는 이 작업을 수행하는 기능이 있습니다.

var obj = { "a" : 1, "b" : 2, "c" : 3};
alert(Object.keys(obj)); // will output ["a", "b", "c"]

호환성에 대한 자세한 내용은 여기를 참조하십시오.

Mozilla 사이트에는 하위 호환성을 위한 스니펫도 있습니다.

if(!Object.keys) Object.keys = function(o){
   if (o !== Object(o))
      throw new TypeError('Object.keys called on non-object');
   var ret=[],p;
   for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p);
   return ret;
}

클라이언트 브라우저와의 큰 호환성을 필요로 하는 실가동 코드에 대해서는, Ivan Nevostruev가 sim에 회답하는 것을 추천합니다.Object.keys를 참조하십시오.다만, ECMA의 새로운 기능을 사용하면, 요구되고 있는 것과 같은 기능을 취득할 수 있습니다.defineProperty특징.

ECMAScript 5의 경우 - Object.defineProperty

ECMA5 에서는 를 사용하여 열거할 수 없는 속성을 정의할 수 있습니다.현재의 호환성은 아직 부족한 점이 많지만, 최종적으로 모든 브라우저에서 사용할 수 있게 될 것입니다.(특히 IE8과의 호환성에 유의하십시오!)

Object.defineProperty(Object.prototype, 'keys', {
  value: function keys() {
    var keys = [];
    for(var i in this) if (this.hasOwnProperty(i)) {
      keys.push(i);
    }
    return keys;
  },
  enumerable: false
});

var o = {
    'a': 1,
    'b': 2
}

for (var k in o) {
    console.log(k, o[k])
}

console.log(o.keys())

# OUTPUT
# > a 1
# > b 2
# > ["a", "b"]

단, ECMA5는 이미 추가되어 있기 때문에Object.keys다음을 사용하는 것이 좋습니다.

Object.defineProperty(Object.prototype, 'keys', {
  value: function keys() {
    return Object.keys(this);
  },
  enumerable: false
});

원답

Object.prototype.keys = function ()
{
  var keys = [];
  for(var i in this) if (this.hasOwnProperty(i))
  {
    keys.push(i);
  }
  return keys;
}

편집: 이 답변은 꽤 오래되었으므로 위의 내용은 그대로 두겠습니다.이 글을 읽는 사람은 Ivan Nevostruev의 답변도 읽어야 합니다.

프로토타입 기능을 열거할 수 없게 만들 수 있는 방법은 없습니다. 이 경우 시제품 기능은 항상 사용하지 않는 for-in-loop으로 나타납니다.hasOwnProperty오브젝트의 프로토타입을 확장하는 것이 그렇게 지저분하지 않다면 이 답변이 여전히 이상적이라고 생각합니다.

사용할 수 있습니다.Object.keys:

Object.keys(h)

JavaScript 유틸리티 라이브러리인 Underscore.js를 사용할 수 있습니다.

_.keys({one : 1, two : 2, three : 3});
// => ["one", "two", "three"]

이게 네가 할 수 있는 최선이야, 내가 알기로는...

var keys = [];
for (var k in h)keys.push(k);

jQuery를 사용하면 다음과 같은 키를 얻을 수 있습니다.

var bobject =  {primary:"red", bg:"maroon", hilite:"green"};
var keys = [];
$.each(bobject, function(key, val){ keys.push(key); });
console.log(keys); // ["primary", "bg", "hilite"]

또는 다음 중 하나를 선택합니다.

var bobject =  {primary:"red", bg:"maroon", hilite:"green"};
$.map(bobject, function(v, k){return k;});

@pimlotc 덕분입니다.

for/in을 사용하여 오브젝트의 속성을 루프할 수 있으므로 다음과 같은 작업을 수행할 수 있습니다.

function getKeys(h) {
  Array keys = new Array();
  for (var key in h)
    keys.push(key);
  return keys;
}

는 Annan Fay의 대답을 사용하고 싶었다.

Object.prototype.keys = function () ...

그러나 Google Maps API v3와 함께 사용하면 Google Maps가 작동하지 않습니다.

하지만,

for (var key in h) ...

잘 동작합니다.

함수가 아닌 요소만 가져오려는 경우 이 코드를 사용하면 다음과 같은 이점이 있습니다.

this.getKeys = function() {

    var keys = new Array();
    for (var key in this) {

        if (typeof this[key] !== 'function') {

            keys.push(key);
        }
    }
    return keys;
}

HashMap 구구mapmapmap 。 this는 키를 포함하는 해시맵개체입니다.

Javascript에서는

Object.keys(h)

언급URL : https://stackoverflow.com/questions/18912/how-can-i-find-the-keys-of-an-object

반응형