자바 스크립트에서 객체가 해시로 두 배가된다는 것을 알고 있지만 키를 가져 오는 내장 함수를 찾을 수 없습니다.
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"]
Here 호환성에서는 자세한 내용을 확인할 수 있습니다.
Mizilla 사이트 또한 스니핏 대한 하위 호환성을 위해.
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;
}
클라이언트 브라우저와의 호환성이 크게 요구되는 프로덕션 코드의 경우 이전 브라우저에서 Object.keys
를 보장하기 위해 shim을 사용하여 위의 Ivan Nevostruev의 답변을 여전히 제안합니다. 그러나 ECMA의 새로운 defineProperty
기능을 사용하여 요청된 정확한 기능을 얻을 수 있습니다.
ECMAScript 5부터 - Object.defineProperty 지원
ECMA5부터 Object.defineProperty()
을 사용하여 열거할 수 없는 프로퍼티를 정의할 수 있습니다. 현재 호환성**]2은 아직 개선해야 할 점이 많지만 언젠가는 모든 브라우저에서 사용할 수 있게 될 것입니다. (특히 현재 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;
}
편집: 이 답변은 이미 오래 전에 나온 답변이므로 위 내용은 그대로 두겠습니다. 이 글을 읽으시는 분들은 아래의 이반 네보스트루에프의 답변도 읽어보시기 바랍니다.
프로토타입 함수를 열거 불가능하게 만들 수 있는 방법이 없기 때문에 항상 hasOwnProperty
를 사용하지 않는 포인 루프에서 나타나게 됩니다. 객체의 프로토타입을 확장하는 것이 그렇게 지저분하지 않다면 이 답변이 이상적이라고 생각합니다.
'' 로비치스키스 사용할 수 있습니다.
Object.keys(h)
[언더스코엘가이스] [1] 가 Javascript 유틸리티에는 라이브러리를 사용할 수 있습니다.
_.keys({one : 1, two : 2, three : 3});
// => ["one", "two", "three"]
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;});
덕분에 @pimlottc
이 코드는 디렉토리에만 할 경우 다음 요소를 가져오는 데 도움을 줄 수 없지만 기능ᆞ기술과
this.getKeys = function() {
var keys = new Array();
for(var key in this) {
if( typeof this[key] !== 'function') {
keys.push(key);
}
}
return keys;
}
이것은 내 이스마프 구축 및 부품, '이 포함된' 는 시동키는 싶단 이스마프 객체에는 시동키는