来自字符串的Javascript嵌套对象

我有一个空对象和一个字符串:

var obj = {}; var str = "abc"; 

有没有办法让我把它变成

 obj = { a: { b: { c: { } } } } 

我不能完全围绕这一个,我甚至不确定它是否可能。

 var obj = {}; var str = "abc"; var arr = str.split('.'); var tmp = obj; for (var i=0,n=arr.length; i 

ES6:

 let str = "abc", arr = str.split('.'), obj, o = obj = {}; arr.forEach(key=>{o=o[key]={}}); console.log(obj); 

这是来自yui2 yahoo.js文件。

 YAHOO.namespace = function() { var a=arguments, o=null, i, j, d; for (i=0; i 

请参阅文档来源。

https://github.com/yui/yui2/blob/master/src/yahoo/js/YAHOO.js

此递归函数返回所需对象的字符串表示forms

 //Usage: getObjectAsString('abc'.split(/\./)) function getObjectAsString (array){ return !array.length ? '{}' : '{"' + array[0] + '":' + getObjectAsString (array.slice(1)) + '}'; } 

现在,您可以使用getObjectAsString的输出转换为对象

 JSON.parse(getObjectAsString('abc'.split(/\./))) 

编辑 :删除’输入为字符串’版本,因为它仅适用于命名空间中的单个字母子部分,例如问题(abc)中给出的那个,通常不是这种情况。

干得好:

 var string = "abc", array = string.split('.'); JSON.parse("{\"" + array.join('": {\"') + "\": {" +array.map(function () {return '}'}).join('') + "}") 

这是我的看法:

 function ensureKeys(str, obj) { for(var parts = str.split('.'), i=0, l=parts.length, cache=obj; i