객체 배열에서 잘못된 자바 스크립트 배열 길이
누군가이 (이상한) 행동을 설명 할 수 있습니까? 첫 번째 예의 길이가 2가 아니라 왜 3이고, 가장 중요한 것은 두 번째 예의 길이가 0 인 이유는 무엇입니까? 키가 숫자이면 길이가 작동합니다. 그렇지 않은 경우 길이는 0입니다. 두 번째 예에서 올바른 길이를 어떻게 얻을 수 있습니까? 감사합니다.
a = [];
a["1"] = {"string1":"string","string2":"string"};
a["2"] = {"string1":"string","string2":"string"};
alert(a.length); // returns 3
b = [];
b["key1"] = {"string1":"string","string2":"string"};
b["key2"] = {"string1":"string","string2":"string"};
alert(b.length); // returns 0
한 가지주의 할 점은 일반 배열과 연관 배열간에 차이가 있다는 것입니다. 일반 배열 (실제 배열)에서 인덱스는 정수 여야합니다. 반면, 연관 배열은 문자열을 인덱스로 사용할 수 있습니다. 원하는 경우 연관 배열을 맵으로 생각할 수 있습니다. 이제 실제 배열은 항상 0부터 시작합니다. 따라서 예제에서는 다음과 같은 방식으로 배열을 만들었습니다.
a = [];
a["1"] = {"string1":"string","string2":"string"};
a["2"] = {"string1":"string","string2":"string"}
Javascript는 문자열 인덱스를 숫자로 변환 할 수 있으므로 위의 코드는 다음과 같습니다.
a = [];
a[1] = {"blah"};
a[2] = {"blah"};
그러나 앞서 말한 것을 기억하십시오. 진정한 배열은 0에서 시작합니다. 따라서 자바 스크립트 인터프리터는 undefined에 자동으로 a [0]을 할당합니다. 방화범이나 크롬 / 사파리 콘솔에서 시도해보십시오. "a"를 인쇄하려고 할 때 이와 같은 내용이 표시됩니다. "[undefined, Object, Object]와 같은 메시지가 표시됩니다. 따라서 예상 한대로 크기가 2가 아니라 3입니다.
두 번째 예에서는 본질적으로 객체에 속성을 추가하는 관련 배열의 사용을 시뮬레이션하려고 시도하고 있다고 확신합니다. 연관된 배열을 사용하면 문자열을 키로 사용할 수 있습니다. 즉, 객체에 속성을 추가하는 것입니다. 따라서 귀하의 예에서 :
b["key1"] = {"string1":"string","string2":"string"};
이것은 정말로 의미합니다 :
b.key1 = {"string1":"string","string2":"string"};
초기화 b = []는 단순히 배열을 생성하지만 할당은 배열을 채우지 않습니다. 단순히 "b"추가 속성을 제공합니다. 도움이 되었기를 바랍니다.. :-)
길이는 1 + 객체에서 가장 큰 정수 키를 반환합니다.
에서 a
가장 큰 키 (3)는 2 2 + 1 그렇다.
에서 b
더 정수 키가없는 (키가있다 key1
하고 key2
있는이의 int로 변환 할 수 없습니다) 자바 스크립트가 가장 큰 키가 있다고 가정 있도록 -1
하고, 1 + -1
수율 0
.
이 프로그램은 다음 사항을 확인하는 데 도움이됩니다.
a = [];
a["1"] = {};
a["4"] = {};
alert(a.length); // Prints 5
ECMAScript 표준, ECMA-262, 5th ed.
15.4.5.2 길이
이 Array 객체의 길이 속성은 값이 항상 배열 인덱스 인 삭제 가능한 모든 속성의 이름보다 숫자 적으로 큰 데이터 속성입니다.
배열의 길이 속성은 정수인 배열 인덱스 만 고려합니다. 다른 속성을 설정해도 길이에 영향을주지 않습니다.
배열의 경우 a["3"]
는 다음과 같습니다 a[3]
(이 동작은 § 15.4.5.1에서 지정됨). 3은 속성이 아닌 배열 인덱스입니다. 따라서 설정 a["3"]
은 어레이의 길이에 영향을줍니다. b["key1"]
와 동일합니다 b.key1
. 속성 설정은 컬렉션의 길이에 영향을주지 않습니다.
참조 URL : https://stackoverflow.com/questions/2528680/javascript-array-length-incorrect-on-array-of-objects
'Program Tip' 카테고리의 다른 글
Python 스레드에서 전체 애플리케이션을 종료하는 방법은 무엇입니까? (0) | 2020.12.15 |
---|---|
사용자 지정 AuthorizeAttribute 클래스 내에서 RedirectToAction ()을 사용할 수 있습니까? (0) | 2020.12.15 |
Java에서 MySQL 날짜 및 타임 스탬프 처리 (0) | 2020.12.15 |
"관대 한"의 사용은 무엇입니까? (0) | 2020.12.15 |
자바 스크립트에서 객체 프로토 타입에 액세스하는 방법은 무엇입니까? (0) | 2020.12.15 |