如何动态创建一个complex/nested js对象?
How to create a complex/nested js object dynamically?
我有以下数据。
变量数据="a.b.c.d"; //只是一个例子,但可以更深入。
- 作为字符串创建的嵌套结构a.b.c.n
现在我想像这样从这些数据创建一个 js 对象..
{
"a":{
"b":{
"c":{
and so on till the given depth.
}
}
}
}
我试过的
function createHierarchy( obj, group, i){
if(i === group.length){
return obj;
}
else{
if(obj[group[i]] === undefined)
{
obj[group[i]] = new Object();
}
createHierarchy(obj[group[i]], group, ++i);
}
}
问题
此函数返回未定义,因为我在每次递归调用中发送新创建的子对象,并且由于新创建的对象是 {},因此最终结果是未定义的。
更新
我只想创建不存在的对象 exist.For 例如:如果 d 已经存在,我将向其中插入一个值。
否则我会创建它。
这就是我添加到@Tholle 的回答中的内容。
if(temp[array[i]] === undefined)
temp = temp[array[i]] = {};
else
temp = temp[array[i]][name] = value;
所以请提出出路。
var data = "a.b.c.n";
var array = data.split(".");
var result = {};
var temp = result;
for(var i = 0; i < array.length; i++) {
temp = temp[array[i]] = {};
}
console.log(result);
function BuildObj(string) {
var obj = {};
var params = string.split(".");
for(var i=params.length-1;i>=0;i--) {
last = obj;
obj = {};
obj[params[i]] = last;
}
return obj;
}
所以,
buildObj("a.b.c.d");
给出:
{
"a": {
"b": {
"c": {
"d": {}
}
}
}
var data = "a.b.c.n";
var array = data.split(".");
var last = {};
var temp = {};
for (var i = array.length - 1; i >= 0; i--) {
temp = {};
temp[array[i]] = last;
last = temp;
}
console.log(last);
我有以下数据。
变量数据="a.b.c.d"; //只是一个例子,但可以更深入。
- 作为字符串创建的嵌套结构a.b.c.n
现在我想像这样从这些数据创建一个 js 对象..
{
"a":{
"b":{
"c":{
and so on till the given depth.
}
}
}
}
我试过的
function createHierarchy( obj, group, i){
if(i === group.length){
return obj;
}
else{
if(obj[group[i]] === undefined)
{
obj[group[i]] = new Object();
}
createHierarchy(obj[group[i]], group, ++i);
}
}
问题
此函数返回未定义,因为我在每次递归调用中发送新创建的子对象,并且由于新创建的对象是 {},因此最终结果是未定义的。
更新
我只想创建不存在的对象 exist.For 例如:如果 d 已经存在,我将向其中插入一个值。 否则我会创建它。
这就是我添加到@Tholle 的回答中的内容。
if(temp[array[i]] === undefined)
temp = temp[array[i]] = {};
else
temp = temp[array[i]][name] = value;
所以请提出出路。
var data = "a.b.c.n";
var array = data.split(".");
var result = {};
var temp = result;
for(var i = 0; i < array.length; i++) {
temp = temp[array[i]] = {};
}
console.log(result);
function BuildObj(string) {
var obj = {};
var params = string.split(".");
for(var i=params.length-1;i>=0;i--) {
last = obj;
obj = {};
obj[params[i]] = last;
}
return obj;
}
所以,
buildObj("a.b.c.d");
给出:
{
"a": {
"b": {
"c": {
"d": {}
}
}
}
var data = "a.b.c.n";
var array = data.split(".");
var last = {};
var temp = {};
for (var i = array.length - 1; i >= 0; i--) {
temp = {};
temp[array[i]] = last;
last = temp;
}
console.log(last);