我有一个键列表和一个值。例如:
keys = ["keyA", "keyB", "keyC"];
value = 100;
我正在尝试创建一个函数来创建 map ,以便:
map["keyA"]["keyB"]["keyC"] = 100;
我认为这是基于给定答案的最佳数据结构 here :
无论如何,挑战我的部分是我需要一个函数来为任意数量的键创建一个映射。我试过循环执行此操作,但无法正常工作,因为我不知道如何访问我的 map 的不同级别,但它也感觉很草率:
for(var i=0; i<keys.length; i++){
for(var j=0; j<i; j++){
maps[keys[0]]...[keys[j]] = {};
if(j+1 === i){
maps[keys[0]]...[keys[j]][keys[i]] = value;
}
}
}
如何创建我的 map ?
最佳答案
您可以尝试存储对最后创建的内部对象的引用,并在循环中更深入,以使其在线性时间内完成:
// Input data:
var keys = ["keyA", "keyB", "keyC", "keyD", "keyE"];
var value = 100;
// Algorithm:
var result = {};
var last = result;
for (var i = 0; i < keys.length - 1; i++)
{
last = (last[keys[i]] = {});
// can be change to a two-liner:
// last[keys[i]] = {};
// last = last[keys[i]];
}
last[keys[keys.length - 1]] = value;
// Output:
document.body.innerHTML = JSON.stringify(result);
document.body.innerHTML += "<br/><br/>" + result["keyA"]["keyB"]["keyC"]["keyD"]["keyE"];
关于JavaScript:创建一个将多个键映射到一个值的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33470428/