JavaScript:地图问题

时间:2017-07-16 19:43:18

标签: 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

它没有按照正确的顺序排列,并且不包含所有键 - &gt;值对,但是如果我将输入的子集这样:

  

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

守则符合我的要求:Here is the picture

我做错了什么?

最好的问候

1 个答案:

答案 0 :(得分:0)

正如我上面评论的那样,Map有唯一的键。但是,您可以扩展Map类并创建Multimap。下面是一个非常(非常非常)简单的实现。下面将所有值添加到在key处找到的数组中,如果该键已经存在于Multimap中,则推送到现有值,您可以使用set()

添加元素

&#13;
&#13;
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);
}
&#13;
&#13;
&#13;