Maison > interface Web > js tutoriel > le corps du texte

Une brève discussion sur la structure des données cartographiques des compétences es6 javascript_javascript

韦小宝
Libérer: 2017-12-15 14:06:19
original
1273 Les gens l'ont consulté

Cet article présente principalement la structure des données cartographiques d'es6 javascript L'éditeur pense que c'est plutôt bon. Je vais maintenant partager avec vous la source JavaScript. code. Également comme référence pour tout le monde. Si vous êtes intéressé par JavaScript, veuillez suivre l'éditeur pour y jeter un œil

Cet article présente la structure des données cartographiques du javascript es6 et la partage avec tout le monde, comme suit :

Structure de la carte Le but et l'utilisation de base de

L'objet JavaScript (Object) est essentiellement une collection de paires clé-valeur (structure de hachage), mais traditionnellement uniquement des chaînes comme clé. Cela entraîne de grandes limites à son utilisation.


var data = {}; 
var element = document.getElementById('myp'); 
data[element] = 'metadata'; 
data['[object HTMLpElement]'] // "metadata"
Copier après la connexion


L'intention originale du code ci-dessus est d'utiliser un nœud DOM comme clé des données de l'objet , mais comme l'objet n'accepte que les caractères, String est utilisé comme nom de clé, donc l'élément est automatiquement converti en chaîne [objet HTMLpElement].


Pour résoudre ce problème, ES6 fournit la structure de données Map. Il est similaire à un objet et constitue également une collection de paires clé-valeur, mais la portée de « clé » ne se limite pas aux chaînes. Différents types de valeurs (y compris les objets) peuvent être utilisés comme clés. En d’autres termes, la structure Object fournit la correspondance « chaîne-valeur » et la structure Map fournit la correspondance « valeur-valeur », qui est une implémentation plus complète de la structure Hash. Si vous avez besoin d'une structure de données « clé-valeur », Map est plus adaptée que Object.



var m = new Map(); 
var o = { 
 p: 'Hello World' 
}; 
m.set(o, 'content') 
m.get(o) // "content" 
m.has(o) // true 
m.delete(o) // true 
m.has(o) // false
Copier après la connexion


Le code ci-dessus utilise la méthode set pour traiter l'objet o comme une clé de m, puis utilise get pour lire la clé, puis utilisez la

méthode delete pour supprimer la clé. En tant que
constructeur, Map peut également accepter un tableau comme paramètre. Les membres de ce tableau sont des tableaux représentant des paires clé-valeur.


var map = new Map([ 
 ['name', ' 张三 '], 
 ['title', 'Author'] 
]); 
map.size // 2 
map.has('name') // true 
map.get('name') // " 张三 " 
map.has('title') // true 
map.get('title') // "Author"
Copier après la connexion


Le code ci-dessus spécifie deux clés, nom et titre, lors de la création d'une nouvelle instance de Map.


Le constructeur Map accepte un tableau comme paramètre et exécute en fait l'algorithme suivant.


var items = [ 
 ['name', ' 张三 '], 
 ['title', 'Author'] 
]; 
var map = new Map(); 
items.forEach(([key, value]) => map.set(key, value));
Copier après la connexion


Dans l'exemple suivant, la chaîne true et le booléen true sont deux clés différentes.



var m = new Map([ 
 [true, 'foo'], 
 ['true', 'bar'] 
]); 
m.get(true) // 'foo' 
m.get('true') // 'bar'
Copier après la connexion


Si la même clé est attribuée plusieurs fois, la valeur suivante écrasera la valeur précédente.


let map = new Map(); 
map 
 .set(1, 'aaa') 
 .set(1, 'bbb'); 
map.get(1) // "bbb"
Copier après la connexion


Le code ci-dessus attribue deux valeurs consécutives à la clé 1, et cette dernière valeur écrase la valeur précédente.


Si une clé inconnue est lue, undefined est renvoyé.


new Map().get('asfddfsasadf') 
 // undefined
Copier après la connexion


Notez que seules les références au même objet seront considérées comme la même clé par la structure Map. Soyez très prudent à ce sujet.



var map = new Map(); 
map.set(['a'], 555); 
map.get(['a']) // undefined
Copier après la connexion


Les méthodes set et get du code ci-dessus semblent être pour la même clé, mais en fait c'est Les adresses mémoire des deux valeurs sont différentes, donc la méthode get ne peut pas lire la clé et renvoie undéfini.


De même, deux instances de la même valeur sont considérées comme deux clés dans la structure Map.


var map = new Map(); 
var k1 = ['a']; 
var k2 = ['a']; 
map 
 .set(k1, 111) 
 .set(k2, 222); 
map.get(k1) // 111 
map.get(k2) // 222
Copier après la connexion


Dans le code ci-dessus, les valeurs des variables k1 et k2 sont les mêmes, mais elles sont considérées comme dans la structure de la carte Deux clés.


Comme le montre ce qui précède, les clés de Map sont en fait liées à l'adresse mémoire. Tant que les adresses mémoire sont différentes, elles sont considérées comme deux clés. Cela résout le problème de collision de propriétés portant le même nom. Lorsque nous étendons les bibliothèques d'autres personnes, si nous utilisons des objets comme noms de clé, nous n'avons pas à nous soucier du fait que nos propres propriétés portent le même nom que celles de l'auteur original.


Si la clé de la Map est un type simple de valeur (nombre, chaîne, Booléen), alors tant que les deux valeurs​​sont strictement égales, la Map la traitera comme une clé, comprenant 0 et - 0 . De plus, bien que NaN ne soit pas strictement égal à lui-même, Map les traite comme la même clé.



let map = new Map(); 
map.set(NaN, 123); 
map.get(NaN) // 123 
map.set(-0, 123); 
map.get(+0) // 123
Copier après la connexion


Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun, et j'espère que vous en apprendrez davantage. Supportez le site Web chinois PHP.


Recommandations associées :

ie8 ne prend pas en charge la méthode de cartographie javascript

Une brève analyse du principe de fonctionnement de JavaScript mapreduce_Connaissances de base

Conversion explicite et conversion implicite basée sur javascript (explication détaillée)_compétences javascript

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!