Maison  >  Article  >  interface Web  >  Exemple d'analyse de la façon dont makeArray() dans jQuery convertit plusieurs types en tableau natif JS

Exemple d'analyse de la façon dont makeArray() dans jQuery convertit plusieurs types en tableau natif JS

黄舟
黄舟original
2017-07-19 09:24:531355parcourir

jQuery.makeArray(obj) Il est facile de deviner son objectif à partir du nom : il doit être utilisé pour convertir l'objet entrant en un tableau natif

Jetons un coup d'œil au site officiel pour cela Explication : Convertissez un objet de type tableau en un véritable tableau JavaScript. (Convertissez un objet de type tableau en un tableau natif JS)

Alors, quel type d'objet peut être appelé " Et qu'en est-il de " tableau -comme un objet" ? Ne vous précipitez pas pour répondre à cette question. Je pense que vous comprendrez après avoir lu l'article. Tout d'abord, jetez un œil à l'expérience suivante

Convertir HTMLCollection en tableau natif

<!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>

Vous pouvez. voyez-le en chrome ici Ce qui est renvoyé via document.getElementsByTagName("p") est une HTMLCollection

au lieu de la NodeList mentionnée sur le site officiel. J'ai spécifiquement recherché la différence entre NodeList et HTMLCollection : . L'objet HTMLCollection et l'objet NodeList sont très similaires, mais le premier est accessible à la fois en utilisant un nom et des index numériques, tandis que le second n'est accessible qu'en utilisant des index numériques (bien sûr, NodeList est également un "objet de type tableau ")

Par L'expérience a révélé que les éléments peuvent être indexés par nom et par tableau. Conclusion : ce qui est renvoyé par document.getElementsByTagName("p") dans Chrome est une HTMLCollection

HTMLCollection peut obtenir sa longueur via elems.length, et sa longueur peut être obtenue via elems.length Est-ce que elems[0] accède aux éléments

comme la méthode d'accès d'un tableau ? En fait, il s'agit simplement d'un "objet de type tableau", mais ce n'est pas un tableau natif de js, donc les méthodes natives du tableau ne sont pas accessibles, telles que (.pop() et .reverse())

Ensuite, l'arr du tableau JS natif est obtenu via la conversion jQuery.makeArray(elems), et vous pouvez ensuite utiliser la méthode native de tableau !

Convertir un tableau enveloppé par jQuery en tableau natif

En plus de HTMLCollection, que peut-on convertir d'autre ? Avez-vous déjà entendu parler des tableaux encapsulés par jQuery ?

Mais j'ai dû le rencontrer. Par exemple, vous pouvez obtenir un groupe de p via $('p'). Ce groupe de p est un tableau enveloppé par jQuery

Un autre exemple. , via .map( )La fonction obtient également un tableau encapsulé par jQuery Vous pouvez également utiliser length pour obtenir la longueur et y accéder via l'index d'indice. Et le tableau encapsulé par jQuery peut également utiliser les méthodes. fourni par jQuery.

peut être converti en un tableau natif via $.makeArray(obj). Par exemple, la méthode la plus courante consiste à obtenir le tableau jQuery dans la fonction .map(), puis à le convertir en un tableau natif et. puis obtenez le résultat via join()

Bien sûr, il existe plusieurs façons de convertir des tableaux enveloppés par jQuery en tableaux natifs. Les plus courantes incluent .get() et .toArray()

Convertir les objets json en tableau natif

Cette situation est un peu plus compliquée, car l'objet json n'est pas un "objet de type tableau", nous avons donc besoin d'une conversion

Rappelez-vous les plusieurs " des objets de type tableau" dont nous avons déjà parlé ? Ils peuvent tous obtenir la longueur via .length et sont accessibles via un index d'indice, tel que : fakeArr.length, fakeArr[0]

Pouvons-nous donc le modifier en laissant json prendre en charge de cette façon ? -comme un objet" ?

Concevez-le d'abord :

Pour que json prenne en charge fakeArr.length, c'est simple. Il vous suffit de définir une paire clé-valeur avec la clé comme longueur<.>

Il semble que la prise en charge de l'accès aux indices puisse également être résolue facilement. De plus, utilisez simplement des nombres comme clés pour les paires clé-valeur~

Ensuite, essayez-le :

L'avez-vous vu ? Succès! Le realArray ici est déjà le tableau natif de js, vous pouvez donc utiliser des méthodes natives telles que reverse()
var fakeArray = {0: "张三", 1: "李四", 2:"朱六", length:3};
var realArray = $.makeArray(fakeArray);
console.log(fakeArray)
console.log(realArray)
realArray.reverse();
console.log(realArray);

Il convient de noter que

, la longueur est très importante pendant le processus de conversion, et cette longueur est déterminée La longueur du tableau convertiSi la longueur dans l'exemple ci-dessus est spécifiée comme 2, alors le tableau converti n'a que les 2 premiers éléments, c'est-à-dire ["Zhang San", "李思"]

Si la longueur dans l'exemple ci-dessus est spécifiée comme 4, alors le tableau converti ne sera pas le tableau que nous voulons, mais un tableau similaire à new Array().push(fakeArray)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn