使用新的Map()映射单键多个值-javascript

时间:2018-07-02 07:37:02

标签: javascript

我需要使用Map()将单个键与多个值映射。但是我的价值观不断被覆盖。帮助。

var myMap = new Map();

myMap.set("1","A");
myMap.set("1","B");

6 个答案:

答案 0 :(得分:0)

Map数据结构是键/值存储。单个键映射到单个值。因此,如果需要多个值,则必须更改该值:

var myMap = new Map();

myMap.set("1",["A","B"]);

使用如上所述的值数组,以使Map使用键"1"映射到多个值。

在OP中第二次调用set,将覆盖第一个值。

答案 1 :(得分:0)

 var myMap = new Map();

 myMap.set("1",["A"]);
 myMap.set("1",["B", ...myMap.get('1')]);

答案 2 :(得分:0)

您可以使用Set来表示地图键的多个值。

function setValue(map, key, value) {
    if (!map.has(key)) {
        map.set(key, new Set(value));
        return;
    }
    map.get(key).add(value);
}

var myMap = new Map();

setValue(myMap, "1", "A");
setValue(myMap, "1", "B");

console.log(Array.from(myMap.entries(), ([k, v]) => [k, [...v]]));

答案 3 :(得分:0)

您可能希望该值是一个数组。如果要像示例一样一次更改一个值,则需要获取该值,然后对其进行更改。

var myMap = new Map();
myMap.set("1", []) //<-- '1' is now an empty array

myMap.get("1").push("A"); // <-- now add to the array
myMap.get("1").push("B");

console.log(myMap.get("1"))
console.log(myMap.get("1")[1]) // <-- just 'B'

当然,还有很多其他方法可以将值输入到地图中。

答案 4 :(得分:-1)

您有两个选择。 为属性定义一个数组:

let myObj = {key1: ["value1", "value2"]};

或动态分配它们:

let myObj = {key1: "value2"};
myObj.key2 = ["value1", "value2"];

答案 5 :(得分:-1)

在特定对象中具有唯一键之前,您无法在JavaScript中进行此操作。

有效:

 {
    a: "1a23",
    b: {
        a: "23gh"
    },
    c: {
        a: 34
    }
 }

无效:-

{
    a: "1a23",
    a: "4354" //Not valid
    b: {
        a: "23gh",
        a: "sdfd" //Not valid
    },
    c: {
        a: 34
    }
 }

因为如果尝试获取“ a”的属性值,编译器将如何确定哪个是您要的。因此,如果您具有相同的属性或尝试像这样手动分配它,则Java脚本会覆盖

let k = {
a: 1,
a:2
}

它将引发错误。因此,您也可以使用数组执行类似的操作

let k = {
a: [1,2]
}
let k2 = myMap.set("a",[1,2]);