我需要使用Map()将单个键与多个值映射。但是我的价值观不断被覆盖。帮助。
var myMap = new Map();
myMap.set("1","A");
myMap.set("1","B");
答案 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]);