jQuery의 makeArray()가 여러 유형을 JS 기본 배열로 변환하는 방법에 대한 분석 예

黄舟
풀어 주다: 2017-07-19 09:24:53
원래의
1390명이 탐색했습니다.

jQuery.makeArray(obj) 이름에서 목적을 추측하기 쉽습니다. 들어오는 객체를 기본 배열로 변환하는 데 사용해야 합니다.

공식 웹사이트의 설명을 보세요: Convert an array-like object into a 진정한 JavaScript 배열입니다.(배열 유사 객체를 JS 기본 배열로 변환)

그렇다면 어떤 종류의 객체를 "배열 유사 객체"라고 부를 수 있을까요? 이 질문에 성급히 대답하지 마세요. 기사를 읽으면 이해하실 것입니다. 먼저 다음 실험을 살펴보겠습니다.

HTMLCollection을 기본 배열로 변환

<!doctype html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<title>jQuery.makeArray demo</title>
		<style>
			p {
				color: red;
			}
		</style>
		<script src="//code.jquery.com/jquery-1.10.2.js"></script>
	</head>
	<body>
		<p> First </p> <p> Second </p> <p> Third </p> <p> Fourth </p>
		<script>
			// Returns a NodeList
			var elems = document.getElementsByTagName("p");
			// Convert the NodeList to an Array
			var arr = jQuery.makeArray(elems);
			// Use an Array method on list of dom elements
			arr.reverse();
			$(arr).appendTo(document.body);
		</script>
	</body>
</html>
로그인 후 복사

여기에서 document.getElementsByTagName에 의해 반환되는 것을 볼 수 있습니다. ("p") chrome 공식 웹사이트에 언급된 NodeList 대신 HTMLCollection

입니다. 특히 NodeList와 HTMLCollection의 차이점을 찾아보았습니다. HTMLCollection 개체는 NodeList 개체와 매우 유사하지만 전자는 이름과 숫자 둘 다로 색인을 생성할 수 있습니다. 후자는 숫자 색인을 통해서만 접근할 수 있습니다(물론 NodeList도 "배열과 유사한 객체"입니다)

실험 후에 요소는 이름과 배열로 색인을 생성할 수 있다는 것이 밝혀졌습니다. 결론: 크롬에서 document.getElementsByTagName("p")에 의해 반환됨 HTMLCollection입니다

HTMLCollection은 elems.length를 통해 길이를 얻을 수 있고 해당 요소는 elems[0]

을 통해 액세스할 수 있습니다. 배열? 사실 그냥 "배열형 객체"일 뿐 js의 기본 배열이 아니므로 (.pop() .reverse(와 같은 기본 배열 메서드에 액세스할 수 없습니다. ))

나중에 jQuery.makeArray(elems) 변환을 통해 기본 JS 배열 arr을 얻은 다음 기본 배열 방법을 사용할 수 있습니다!

jQuery로 래핑된 배열을 네이티브 배열로 변환

HTMLCollection 외에 무엇을 변환할 수 있나요? jQuery로 래핑된 배열에 대해 들어본 적이 있나요?

하지만 나는 그것을 발견했을 것입니다. 예를 들어 $('p')를 통해 p 그룹을 얻는다면 이 p 그룹은 jQuery로 래핑된 배열입니다

또 다른 예는 를 통해 얻는 것입니다. map() 함수도 jQuery로 래핑된 배열입니다. 배열의 길이는 길이로 구하고 첨자 인덱스를 통해 접근할 수도 있으며, jQuery로 래핑된 배열도 jQuery에서 제공하는 메소드를 사용할 수 있습니다.

$.makeArray(obj)를 통해 네이티브 배열로 변환할 수 있습니다. 예를 들어 가장 일반적인 방법은 .map() 함수에서 jQuery 배열을 가져온 다음 이를 네이티브 배열로 변환한 다음 가져오는 것입니다. Join()을 통한 결과

물론 jQuery 래핑 배열을 기본 배열로 변환하는 방법은 여러 가지가 있습니다. 일반적인 방법으로는 .get() 및 .toArray()

json 개체를 기본 배열로 변환

이 있습니다.

이 상황은 좀 더 복잡합니다. json 개체가 "배열 같은 개체"가 아니기 때문에 변환이 필요하기 때문입니다.

전에 이야기한 여러 "배열 같은 개체"를 기억하시나요? 모두 .length를 통해 길이를 얻을 수 있으며 다음과 같은 첨자 인덱스를 통해 액세스할 수 있습니다. fakeArr.length, fakeArr[0]

그러면 json을 "배열"로 바꿀 수 있습니까? "like object"는 어떻습니까?

먼저 디자인하세요:

json이 fakeArr.length를 지원하도록 하려면 길이가 있는 키로 키-값 쌍을 정의하기만 하면 됩니다.

아래 첨자 액세스 지원은 해결하기 쉬운 것 같습니다. 추가, 키-값 쌍 숫자를 키로 사용하세요~

그럼 시도해 보세요:

var fakeArray = {0: "张三", 1: "李四", 2:"朱六", length:3};
var realArray = $.makeArray(fakeArray);
console.log(fakeArray)
console.log(realArray)
realArray.reverse();
console.log(realArray);
로그인 후 복사

보셨나요? 성공! 여기의 realArray는 이미 js의 기본 배열이므로 reverse()

와 같은 기본 메서드를 사용할 수 있습니다 변환 프로세스 중에 길이가 매우 중요하다는 점에 유의해야 합니다. 이 길이는 변환된 배열의 길이도 결정합니다.

위 예의 길이가 2로 지정된 경우 변환된 배열에는 처음 2개의 요소인 ["Zhang San", "Li Si"]

위 예의 길이가 4로 지정하면 변환된 배열 배열은 우리가 원하는 배열이 아니지만 new Array().push(fakeArray)

와 유사한 배열이 됩니다.

위 내용은 jQuery의 makeArray()가 여러 유형을 JS 기본 배열로 변환하는 방법에 대한 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!