객체의 키를 찾으려면 어떻게 해야 합니까?
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;
}
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
'programing' 카테고리의 다른 글
| MySQL 함수는 두 날짜 사이의 근무 일수를 구합니다. (0) | 2022.11.05 |
|---|---|
| mysqldump 출력을 작은 파일로 분할하려면 어떻게 해야 합니까? (0) | 2022.11.05 |
| 도커 컴포지트를 사용하여 도커라이즈된 스프링 부트 및 MariaDb를 시작할 때 Connection Rejected 오류가 발생함 (0) | 2022.11.05 |
| SQL - 열에서 가장 높은 숫자를 찾는 방법 (0) | 2022.11.05 |
| 웹 MVC 응용 프로그램에 액세스 제어 목록을 구현하려면 어떻게 해야 합니까? (0) | 2022.11.05 |