Javascript 如何推送阵列';s元素并使其成为映射键

Javascript 如何推送阵列';s元素并使其成为映射键,javascript,algorithm,dictionary,Javascript,Algorithm,Dictionary,我刚开始使用地图数据结构,我试图实现与这些答案相反的结果: 事实上,我希望实现与这里所问的相同的目标,但建议的答案不起作用: 事实上: let answers = [1,"2",3]; let myMap = new Map(); myMap.set('0', 'foo'); myMap.set(1, 'bar'); myMap.set({}, 'baz'); myMap.set(answers); 因此,我想得到以下结果: myMap = ( [1, 'foo'],["2",'bar']

我刚开始使用地图数据结构,我试图实现与这些答案相反的结果:

事实上,我希望实现与这里所问的相同的目标,但建议的答案不起作用:

事实上:

let answers = [1,"2",3];
let myMap = new Map();
myMap.set('0', 'foo');
myMap.set(1, 'bar');
myMap.set({}, 'baz');

myMap.set(answers);
因此,我想得到以下结果:

myMap = ( [1, 'foo'],["2",'bar'],[3,'baz'])
但是新的数组只是从 ,相反,我想替换每个键(我不介意使用这个规则),所以我尝试了 在iterable(映射)中迭代,例如

或者用一种更优雅的方式,也许是一种forEach,但首先我想知道我在这里犯了什么错误,因为它不起作用


关于类似的问题,答案确实提到了使用树概念的库,但如果可能的话,我会避免使用外部库。

您是否正在寻找类似的库

var answers=[1,2,3];
var myMap=newmap();
myMap.set('0','foo');
myMap.set(1,'bar');
myMap.set({},'baz');
var newMap=newMap();
from(myMap.keys()).forEach((k,i)=>{
const v=myMap.get(k);
常数nk=答案[i];
newMap.set(nk,v);
});
//打印地图
for(让newMap的[k,v]{
console.log(k,“->”,v)

}
你在找这样的东西吗

var answers=[1,2,3];
var myMap=newmap();
myMap.set('0','foo');
myMap.set(1,'bar');
myMap.set({},'baz');
var newMap=newMap();
from(myMap.keys()).forEach((k,i)=>{
const v=myMap.get(k);
常数nk=答案[i];
newMap.set(nk,v);
});
//打印地图
for(让newMap的[k,v]{
console.log(k,“->”,v)


}
一个键需要有一个值。你为什么不想要呢?你在找
Set
?@VLAZ也许我应该说得更清楚些,我想用数组值替换键,而不接触所有值。你是说你有一个映射,想为数组中的每个元素设置所有可用键吗?例如,
{“苹果”->“水果”、“猫”->“动物”}
当与
[“a”、“b”]
组合时,会变成
{“a”->“水果”、“b”->“动物”}
?请添加想要的结果。
更优雅的方式,也许forEach
IMO:
for of
更优雅,forEach更优雅,当
const/let&for of
不可用时。键需要有一个值。你为什么不想要呢?你在找
Set
?@VLAZ也许我应该说得更清楚些,我想用数组值替换键,而不接触所有值。你是说你有一个映射,想为数组中的每个元素设置所有可用键吗?例如,
{“苹果”->“水果”、“猫”->“动物”}
当与
[“a”、“b”]
组合时,会变成
{“a”->“水果”、“b”->“动物”}
?请添加想要的结果。
更优雅的方式,也许forEach
IMO:
for of
更优雅,forEach更优雅,当
const/let&for of
不可用时。实际上我不想创建一个新地图。我想换我地图的钥匙。我将在实际的myMap中尝试您的代码。我会对此提出警告。如果关键点重叠,则会丢失值。事实上,您的小样本已经发生了关键冲突。”将“key
'0'
替换为
1
将过早地覆盖值“bar”。@Slawomir Chodnicki您是对的。在我的例子中,这种情况会发生。不幸的是,避免重叠会再次使用数组键添加实际值,并以Map结束。size=6。我接受了你的回答,因为我需要的是一个解决方案,可以动态创建一个新地图。我不知道你想用这个功能实现什么。但是像
[[k1,v1],[k2,v2],…]
这样的数据结构也可能适合您的目的……是的,这也是一种方法。最后,我简化了逻辑并从2个数组创建了一个映射。谢谢你的点击,它帮助我操纵了地图。现在我必须检查2个映射的2个值,如果它们是“给定”的夫妇:“hause”->“Haus”。我想如果更好的是一个对象或者一个地图,或者更好的是一个对象数组,那么实际上我并不想创建一个新的地图。我想换我地图的钥匙。我将在实际的myMap中尝试您的代码。我会对此提出警告。如果关键点重叠,则会丢失值。事实上,您的小样本已经发生了关键冲突。”将“key
'0'
替换为
1
将过早地覆盖值“bar”。@Slawomir Chodnicki您是对的。在我的例子中,这种情况会发生。不幸的是,避免重叠会再次使用数组键添加实际值,并以Map结束。size=6。我接受了你的回答,因为我需要的是一个解决方案,可以动态创建一个新地图。我不知道你想用这个功能实现什么。但是像
[[k1,v1],[k2,v2],…]
这样的数据结构也可能适合您的目的……是的,这也是一种方法。最后,我简化了逻辑并从2个数组创建了一个映射。谢谢你的点击,它帮助我操纵了地图。现在我必须检查2个映射的2个值,如果它们是“给定”的夫妇:“hause”->“Haus”。我认为如果更好的是一个对象或一张地图,或者更好的是一个对象数组。
let k = myMap.keys();

for (let [key, value] of iterable) {
   k.next().value = answers
}