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"
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
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"
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));
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, la valeur suivante écrasera la valeur précédente.
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 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
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
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 valeurssont 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
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!