2017-07-16 115 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); 
 
}