Maison  >  Article  >  interface Web  >  Interprétation détaillée de la structure des données cartographiques en javascript

Interprétation détaillée de la structure des données cartographiques en javascript

亚连
亚连original
2018-06-20 17:00:163452parcourir

Cet article présente principalement la structure des données cartographiques du javascript es6. L'éditeur pense que c'est assez bon. Maintenant, je vais le partager avec vous et le donner comme référence. Suivons 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. Les détails sont les suivants :

Le but et l'utilisation de base. de la structure Map

L'objet JavaScript (Object) est essentiellement une collection de paires clé-valeur (structure Hash), mais traditionnellement, seules les chaînes peuvent être utilisées comme clés. Cela entraîne de grandes limites à son utilisation.

var data = {}; 
var element = document.getElementById('myp'); 
data[element] = 'metadata'; 
data['[object HTMLpElement]'] // "metadata"

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 chaînes comme noms de clé, l'élément est automatiquement converti en chaîne [objet Élément HTMLp].

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

Le code ci-dessus utilise la méthode set pour traiter l'objet o comme une clé de m, puis utilise la méthode get pour lire la clé, puis utilise 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"

Lorsque le code ci-dessus crée une nouvelle instance de Map, il spécifie deux clés, le nom et le titre.

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));

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'

Si la même clé est attribuée plusieurs fois, les valeurs ultérieures écraseront les précédentes.

let map = new Map(); 
map 
 .set(1, 'aaa') 
 .set(1, 'bbb'); 
map.get(1) // "bbb"

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

Notez que seules les références au même objet seront traité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

Les méthodes set et get du code ci-dessus semblent être pour la même clé, mais en fait ce sont deux valeurs et les adresses mémoire sont différentes, donc la méthode get ne peut pas lire la clé et retour indé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

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

Comme le montre ce qui précède, les clés de Map sont en fait liées aux adresses 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 une valeur de type simple (nombre, chaîne, booléen), alors la Map la traite comme une clé tant que les deux valeurs sont strictement égales, dont 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

J'ai compilé ce qui précède pour vous, j'espère que cela vous sera utile à l'avenir.

Articles associés :

Fichier de configuration vue-cli (tutoriel détaillé)

Utiliser jQuery pour encapsuler animate.css (tutoriel détaillé)

Comment réinitialiser l'état d'inactivité dans vuex

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