Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 객체의 길이(속성 개수) 구하는 방법

자바스크립트에서 배열은 length 속성을 제공하지만, 일반 객체에는 이러한 속성이 기본적으로 존재하지 않습니다. 그렇다면 객체에 담긴 속성의 개수, 즉 '객체의 길이'는 어떻게 구할 수 있을까요?

예제 객체 준비하기

먼저 다음과 같은 학생(Student) 객체가 있다고 가정해 보겠습니다.

var studentObject = new Object();
studentObject["studentFirstName"] = "John";
studentObject["studentLastName"] = "Doe";
studentObject["studentAge"] = 22;
studentObject["studentCountryName"] = "US";
studentObject["studentCollegeName"] = "MIT";
studentObject["studentSubjectName"] = "JavaScript";

이 객체에는 총 6개의 속성이 들어 있습니다. 이제 이 객체의 길이를 직접 계산해 보겠습니다.

객체의 길이를 구하는 원리

핵심 아이디어는 간단합니다. for...in 반복문으로 객체의 모든 키(key)를 순회하면서, 해당 키가 객체 자신의 속성인 경우에만 카운터 변수를 1씩 증가시키는 것입니다. 순회가 끝나면 카운터 값을 반환하면 됩니다.

여기서 hasOwnProperty() 메서드를 사용하는 이유는 프로토타입 체인에서 상속받은 속성까지 세는 것을 방지하기 위해서입니다. 즉, 객체가 실제로 소유한 속성만 정확하게 셀 수 있습니다.

전체 예제 코드

var studentObject = new Object();
studentObject["studentFirstName"] = "John";
studentObject["studentLastName"] = "Doe";
studentObject["studentAge"] = 22;
studentObject["studentCountryName"] = "US";
studentObject["studentCollegeName"] = "MIT";
studentObject["studentSubjectName"] = "JavaScript";

Object.findLength = function (stObject) {
    var counter = 0, k;
    for (k in stObject) {
        if (stObject.hasOwnProperty(k))
            counter++;
    }
    return counter;
};

var lengthOfStudentObject = Object.findLength(studentObject);
console.log("The length Student Object is=" + lengthOfStudentObject);

프로그램 실행 방법

위 코드를 실행하려면 Node.js 환경에서 다음 명령어를 입력합니다.

node fileName.js

여기서는 파일 이름을 demo191.js로 저장했다고 가정합니다.

실행 결과

위 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

PS C:\Users\Amit\javascript-code> node demo191.js
The length Student Object is=6

참고: 더 간단한 최신 문법

최신 자바스크립트(ES5 이상)에서는 위와 같이 함수를 직접 작성하지 않아도 Object.keys() 메서드를 사용해 한 줄로 객체의 길이를 구할 수 있습니다.

var lengthOfStudentObject = Object.keys(studentObject).length;
console.log(lengthOfStudentObject); // 6

Object.keys()는 객체가 소유한 열거 가능한 속성 이름들을 배열로 반환하므로, 배열의 length 속성을 활용하면 손쉽게 속성 개수를 얻을 수 있습니다. 상황에 맞는 방법을 선택해 사용하시기 바랍니다.