2017-07-16 133 views
-1

我的代码存在问题。JavaScript:映射问题

function openOrSenior(data) { 
    "use strict"; 

    let myMap = new Map(data); 
    let test = []; 
    let old = []; 
    let val = []; 


    for(let key of myMap.keys()){ 
      old.push(key); 
    } 

    for(let value of myMap.values()){ 
      val.push(value); 
    } 

    for(let i = 0; i < data.length; i++){ 
     if(old[i] >= 55 && val[i] > 7){ 
      test.push("Senior"); 
     } else { test.push("Open");} 
    } 
    return test; 
} 

如果我有一个这样的输入和调试我的代码:

openOrSenior([[21,21],[0,0],[90,8],[1,1 ],[60,12],[90,7],[75,11],[55,10],[90,9],[54,9]]);

我的地图有此键&值对:myMap

它不是以正确的顺序,并且不包含所有键 - >值对的,但如果我把我的输入是这样的一个子集:

openOrSenior([[21,21],[0,0],[90,8]]);

的代码做什么,我想:Here is the picture

我在做什么错?

最好的问候

+5

一个地图具有唯一的键,因此第二次尝试添加90作为键将覆盖存储在键上的值 – baao

回答

0

正如我上面所说的,地图有唯一的键。但是,您可以扩展Map类并创建一个Multimap。下面是一个非常非常简单的实现。下面将所有的值加在钥匙上发现了一个数组,推到现有的值,如果键已经在我们的Multimap之,您可以通过使用一套()添加元素

class Multimap extends Map { 
 
    constructor(arrOfArr = [[]]) { 
 
    super(arrOfArr); 
 
    } 
 

 
    set(key, value) { 
 
    super.set(key, super.has(key) ? super.get(key).concat(value) : [value]); 
 
    } 
 
} 
 

 
let foo = new Multimap([[21, 21], [0, 0], [90, 8], [1, 1], [60, 12], [90, 7], [75, 11], [55, 10], [90, 9], [54, 9]]); 
 
foo.set(21, 22); 
 

 
for (let [k,v] of foo.entries()) { 
 
    console.log(k, v); 
 
}