Maison  >  Questions et réponses  >  le corps du texte

Utilisation d'objets Array comme clés dans ES6 Map

J'essaie de mettre à jour mon code vers ES6 car j'utilise Node 4.0 et j'aime vraiment ses fonctionnalités jusqu'à présent. Cependant, je me sens différent avec le nouvel ES6 Map 数据结构有问题,因为当使用 Array 作为键时,它的行为与 {}. Je l'utilise comme contre-carte.

J'exécute ce code et je veux savoir comment utiliser un tableau comme clé pour Map .

"use strict";

var a = new Map();
a.set(['x','y'], 1);
console.log(a.get(['x','y']));

var b = {};
b[['x','y']] = 1;

console.log(b[['x','y']]);

Il affiche ce qui suit, la première ligne devrait être 1 而不是 undefined :

undefined
1

La carte JS originale stringifie les clés et je ne veux pas faire le même type de hack de stringification avec le nouvel ES6 Map.

Comment puis-je utiliser de manière fiable des tableaux comme clés dans ES6 Map ?

P粉344355715P粉344355715364 Il y a quelques jours649

répondre à tous(2)je répondrai

  • P粉529245050

    P粉5292450502023-10-22 13:33:57

    Vous devez enregistrer une référence à l'instance non primitive de Array utilisée comme clé. Veuillez noter la différence dans les deux exemples suivants :

    "use strict";
    
    var a = new Map();
    a.set(['x','y'], 1);
    console.log(a.get(['x','y']));
    console.log(['x','y'] === ['x','y']);
    
    var b = new Map();
    var array = ['x','y'];
    b.set(array, 1);
    console.log(b.get(array));
    console.log(array === array);

    répondre
    0
  • P粉978551081

    P粉9785510812023-10-22 11:23:32

    Comprenez comment les clés de la carte ES2015 se comparent (presque) comme === 运算符一样。两个数组实例,即使它们包含相同的值,也不会以 === les unes aux autres.

    Essayez ceci :

    var a = new Map(), key = ['x', 'y'];
    a.set(key, 1);
    console.log(a.get(key));

    Étant donné que la classe Map est destinée à être utilisée comme classe de base, vous pourrez peut-être utiliser des fonctions .get() remplacées pour implémenter des sous-classes.

    (Le "presque" dans la première phrase reflète que la comparaison de l'égalité des clés Map est effectuée via Object.is(), ce qui arrive rarement dans le codage quotidien. Essentiellement la troisième variante du test d'égalité en JavaScript.)

    répondre
    0
  • Annulerrépondre