我不确定这个问题的最佳表达方式是什么,但基本上我想创建一个循环来创建这样的对象:
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/