2017-03-25 1 views
-1

Pour un petit exemple de programme, j'ai dû compter les occurrences de plusieurs chaînes. J'ai donc utilisé une carte pour compter en utilisant une chaîne comme clé un nombre comme valeur. Pour cela, j'ai ajouté une fonction à l'objet Carte:occurrences de chaîne de comptage à l'aide de la carte

Map.prototype.inc = function(s) { 
    if (this.has(s)) this[s] = this[s]+1 
    else    this[s] = 1 
} 

Cela ne fonctionne pas comme prévu. Cette entrée:

var test = new Map() 
test.inc("a"); test.inc("a"); test.inc("b"); 

résultats dans:

test = { "a": 1, "b": 1}

Le résultat souhaité est le suivant:

{"a": 2, "b": 1}

si la clé n'existait pas son jeu à 1. D'accord
si la clé existait sa valeur reste 1. Bad

Après le débogage j'ai trouvé que le ce pointeur est toujours une carte vide.

J'ai donc lu à propos du ce mot-clé qui ne m'explique rien (pour moi). ce devrait être la carte droite?

Pourquoi cela ne fonctionne-t-il pas?

C'est un code assez facile, je sais que c'est pourquoi je veux savoir comment cela fonctionne.

J'espère que quelqu'un peut me aider :)

Répondre

1

Essayez d'utiliser set et get méthodes comme celle-ci.

Map.prototype.inc = function(s) { 
 
     if (this.has(s)) { 
 
      this.set(s, this.get(s) + 1);  
 
     } else { 
 
      this.set(s, 1); 
 
     } 
 
    } 
 

 
    var t = new Map(); 
 
    t.inc('a');t.inc('a');t.inc('b'); 
 
    console.log(t);