JavaScript:创建一个将多个键映射到一个值的映射?

标签 javascript

我有一个键列表和一个值。例如:

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/

相关文章:

javascript - 使用 ajax 更新 Shopify 购物车而不刷新页面

javascript - Backbone.js 中的过滤模型(不是集合)

javascript - 顽固的 Redux Action 发送空数组

javascript - 循环遍历不同数组中的元素

asp.net - 如何在 asp.net 母版页中插入 javascript

javascript - 如何使用 MS Graph API 上传任何文件?

javascript - Crossrider setPopup() 小宽度

javascript - 数组比访问 Google Scripts 中的 Google 表格单元格快多少?

javascript - 使用 json.parse 的字符无效

javascript - 解释 Math.floor(Math.random())