source

오브젝트 길이를 얻는 방법

goodcode 2022. 9. 22. 00:23
반응형

오브젝트 길이를 얻는 방법

객체의 길이를 반환할 수 있는 내장 함수가 있나요?

예를 들어, 저는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

반응형