正在创建嵌套的Javascript对象
Creating a nested Javascript object
我显然无法抽象地思考。。。但我想从使用数组值作为属性名的数组中创建一个Javascript对象,但它们应该是相互嵌套的对象。
如果我有一个这样的数组:
['First', 'Second', 'Third', 'Fourth']
我的预期输出是:
{
First: {
Second: {
Third: {
Fourth: {}
}
}
}
}
更新这是我在通信中提到的功能:
function appendKey(obj, to, key) {
if (obj.hasOwnProperty(to)) {
appendKey(obj[to], to, key);
} else {
obj[key] = {};
}
return obj;
}
我的意图是这样称呼它:
var data = ['First', 'Second', 'Third', 'Fourth'];
data = appendKey(data, 'First', 'Second');
data = appendKey(data, 'Second', 'Third');
data = appendKey(data, 'Third', 'Fourth');
很明显,这可以被放入一个循环中,这就是为什么我想这样做。我的输出结果是:
data = { 'First' : { 'Second' } } // it works this time!
data = { 'First' : { 'Second' },
'Third' : { } }
data = { 'First' : { 'Second' },
'Third' : { 'Fourth' { } } }
在循环外,将基对象存储在一个变量中,并有一个单独的变量来存储当前对象(开始时与基对象相同)。
在循环中,取"当前"对象,使用当前数组成员给它一个键,为该键指定一个新对象,并使该新对象成为新的"当前"物体。
var arr = ['First', 'Second', 'Third', 'Fourth'],
obj = {},
currObj = obj;
arr.forEach(function(key) {
currObj = (currObj[key] = {});
});
console.log(obj); // {First:{Second:{Third:{Fourth:{}}}}}
演示:http://jsfiddle.net/qunDt/
如果您愿意,可以将forEach
中的代码展开一点。
arr.forEach(function(key) {
currObj[key] = {};
currObj = currObj[key];
});
如果你想要一个纯粹的递归方法,你可以这样做:
function nested(list, o) {
if (list.length === 0)
return o;
o[list.shift()] = nested(list, {})
return o;
}
var obj = nested(arr, {});
var names = ['First', 'Second', 'Third', 'Fourth'];
var build = function(soFar,remaining) {
if(remaining.length === 0) {return soFar;}
var outer = {};
outer[names.pop()] = soFar;
return build(outer, names);
}
var result = build({}, names);
相关文章:
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 循环遍历以数组为值的Javascript对象
- 从ajax请求中获取javascript对象
- 如何从对象的原型方法访问JavaScript对象属性
- 将XML转换为普通的旧JavaScript对象
- 通过引用传递JavaScript对象
- javascript对象操作:根据指定条件选择属性
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 如何在异步函数中使用javascript对象
- 临时Javascript对象
- 如何在ASP中为用户控件添加Javascript对象网
- 使用数组向下搜索Javascript对象
- Rails将JavaScript对象存储到Model的有效方式
- JavaScript对象不是从原型链继承的
- 如何创建具有默认值的JavaScript对象字段?(AngularJS模型相关)
- SetInterval在javascript对象中表现怪异
- Javascript 对象和 this 关键字
- 如何在不知道关键字的情况下访问javascript对象值
- 在 JavaScript 对象中设置要使用的运算符的属性
- 如何搜索JavaScript对象并更改值