javascript - 在循环中创建一个深度(水平)对象

标签 javascript algorithm object for-loop

我不确定这个问题的最佳表达方式是什么,但基本上我想创建一个循环来创建这样的对象:

var dictionary = {};
var arr = [
              ["for", "item", "in", "list"],
              ["if", "condition"]
          ];

// Insert Magic Loop to yield:

dictionary.for.item.in.list // {} (exists, as well as rest of chain)
dictionary.if.condition     // {} (exists, as well as rest of chain)
dictionary.for.item         // {}
dictionary.test             // undefined

最佳答案

在我的脑海中:

function create(arrArray) {
   for(var i = 0; i < arrArray.length; i++) {
       var arr = arrArray[i];

       var _dict = dictionary;

       for(var j = 0; j < arr.length; j++) {
           if(!_dict[arr[j]]) {
              _dict[arr[j]] = {};
           }
           _dict = _dict[arr[j]];
       } 
   }
}

编辑

这是解决方案的一个子集。我写了一个接受数组和字典作为参数的函数:

function create(arr, dict) {           
    var _dict = dict;

    for(var j = 0; j < arr.length; j++) {
        if(!_dict[arr[j]]) {
           _dict[arr[j]] = {};
        }
        _dict = _dict[arr[j]];
    } 
}

var dictionary = {};

create(["for", "item", "in", "list"], dictionary);
create(["if", "condition"], dictionary)

如果不担心覆盖,可以把循环中的if去掉:

function create(arr, dict) {           
    var _dict = dict;

    for(var j = 0; j < arr.length; j++) {
        _dict[arr[j]] = {};
        _dict = _dict[arr[j]];
    } 
}

为了更好的可读性:

function create(arr, dict) {           
    var _dict = dict;

    for(var j = 0; j < arr.length; j++) {
        var key = arr[j];
        _dict[key] = {};
        _dict = _dict[key];
    } 
}

关于javascript - 在循环中创建一个深度(水平)对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5654663/

相关文章:

javascript - 基于两个数组创建一个数组

c++ - 部分降序排列

javascript - 使用带有子方法的函数可以吗?

php - HTML 表单和文件元素

javascript - 如何在 JavaScript 中递归地表达 .filter() 函数?

javascript - 多级 Bootstrap 下拉列表的问题

algorithm - 为什么线性函数的复杂度与二次方程的复杂度相同

python - 动态规划 - 洗车

Python:将类对象保存在字典中

javascript - 循环遍历 droste 效果 javascript 对象