오브젝트 길이를 얻는 방법
객체의 길이를 반환할 수 있는 내장 함수가 있나요?
예를 들어, 저는a = { 'a':1,'b':2,'c':3 }
이 값은 반환되어야 한다.3
를 사용하면a.length
그것은 되돌아온다undefined
.
단순한 루프 기능일 수도 있습니다만, 내장 기능이 있는지 알고 싶습니다.
관련된 질문(JSON 객체의 길이)이 있습니다.선택한 답변에서 사용자는 객체를 배열로 변환하도록 조언합니다.이것은 제 태스크에 적합하지 않습니다.
Object.keys()를 지원하는 브라우저의 경우 다음 작업을 수행할 수 있습니다.
Object.keys(a).length;
그렇지 않으면 (IE < 9에서는 특히) 직접 오브젝트를 루핑할 수 있습니다.for (x in y)
루프:
var count = 0;
var i;
for (i in a) {
if (a.hasOwnProperty(i)) {
count++;
}
}
그hasOwnProperty
오브젝트 리터럴로부터의 속성만을 계산하고, 오브젝트가 프로토타입으로부터 「추적」한 속성은 계산하지 않는 것을 확인합니다.
이것으로 충분합니다.
Object.keys(a).length
하지만,Object.keys
는 IE8 이하, Opera 및 FF 3.6 이하에서는 지원되지 않습니다.
라이브 데모: http://jsfiddle.net/simevidas/nN84h/
다음과 같이 간단하게 할 수 있습니다.
var len = $.map(a, function(n, i) { return i; }).length;
언더스코어(http://underscorejs.org/docs/underscore.html)를 참조해 보셨습니까?유용한 방법이 많은 유틸리티 라이브러리입니다.컬렉션이 있습니다.size
필요한 것을 얻을 수 있는 toArray 메서드도 있습니다.
_.size({one : 1, two : 2, three : 3});
=> 3
요약하면 범용 기능(ie8 지원 포함)을 다음에 나타냅니다.
var objSize = function(obj) {
var count = 0;
if (typeof obj == "object") {
if (Object.keys) {
count = Object.keys(obj).length;
} else if (window._) {
count = _.keys(obj).length;
} else if (window.$) {
count = $.map(obj, function() { return 1; }).length;
} else {
for (var key in obj) if (obj.hasOwnProperty(key)) count++;
}
}
return count;
};
document.write(objSize({ a: 1, b: 2, c: 3 }));
// 3
jQuery에서는 다음과 같은 방법으로 작성했습니다.
len = function(obj) {
var L=0;
$.each(obj, function(i, elem) {
L++;
});
return L;
}
따라서 개체를 찾아서 교체할 필요가 없습니다.키 방식, 또 다른 접근법은 스크립트 실행 초기에 이 코드를 사용하는 것입니다.
if(!Object.keys)
{
Object.keys = function(obj)
{
return $.map(obj, function(v, k)
{
return k;
});
};
}
다음과 같은 방법으로도 실행할 수 있습니다.
Object.entries(obj).length
예를 들어 다음과 같습니다.
let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]
Innuendo의 답변 jQuery-is 함수는 바로 사용할 수 있습니다.
$.extend({
keyCount : function(o) {
if(typeof o == "object") {
var i, count = 0;
for(i in o) {
if(o.hasOwnProperty(i)) {
count++;
}
}
return count;
} else {
return false;
}
}
});
다음과 같이 호출할 수 있습니다.
var cnt = $.keyCount({"foo" : "bar"}); //cnt = 1;
또 하나의 답변:
var j = '[{"uid":"1","name":"Bingo Boy", "profile_img":"funtimes.jpg"},{"uid":"2","name":"Johnny Apples", "profile_img":"badtime.jpg"}]';
obj = Object.keys(j).length;
console.log(obj)
이미 jQuery 오브젝트인 아이템의 개수를 확인하러 오시는 분:
.length는 당신이 찾고 있는 것입니다.
예:
len = $('#divID').length;
alert(len);
새로운 의존관계를 회피하려면 독자적인 스마트오브젝트를 만들 수 있습니다.물론 당신이 더 많은 것을 하고 싶을 때만 그것의 크기를 알 수 있습니다.
MyNeatObj = function (obj) {
var length = null;
this.size = function () {
if (length === null) {
length = 0;
for (var key in obj) length++;
}
return length;
}
}
var thingy = new MyNeatObj(originalObj);
thingy.size();
개체에 정의되지 않은 속성이 있을 수 있습니다.의 방법을 사용하는 경우Object.keys(data).length
이러한 속성도 카운트됩니다.
그것들을 걸러내는 것이 좋을지도 모릅니다.
Object.keys(data).filter((v) => {return data[v] !== undefined}).length
Lodash lib 및 _.toLength(개체)를 사용하면 오브젝트의 길이를 알 수 있습니다.
다른 이름: 길이의 값 쌍을 추가하여 적절히 증가/감소할 수 있습니다.이렇게 하면 길이를 쿼리해야 할 때 개체 속성 전체를 매번 반복할 필요가 없으며 특정 브라우저나 라이브러리에 의존할 필요도 없습니다.물론 모든 것은 당신의 목표에 달려있다.
언급URL : https://stackoverflow.com/questions/5533192/how-to-get-object-length
'source' 카테고리의 다른 글
시간 범위 내에서 5분 간격으로 그룹화 (0) | 2022.09.22 |
---|---|
10억 번째 상대 수입액 (0) | 2022.09.22 |
JavaScript가 멀티스레딩을 지원하지 않는 이유는 무엇입니까? (0) | 2022.09.22 |
JS 개체를 폼 데이터로 변환 (0) | 2022.09.22 |
오류 발생 시 python 디버거를 자동으로 시작하는 중 (0) | 2022.09.22 |