Javascript 递归JS函数每秒错过一次循环
我有一个函数,它的格式是Javascript 递归JS函数每秒错过一次循环,javascript,Javascript,我有一个函数,它的格式是 u1fsQExd1aZmnpL : { 2FNdVdkaefaD6xQ : { fZ0zn6d51TgVqID : { 05E1JSFYVHJlGVP : {} } } } 并将其更改为 u1fsQExd1aZmnpL : { subfields : { 2FNdVdkaefaD6xQ : { subfields : {
u1fsQExd1aZmnpL : {
2FNdVdkaefaD6xQ : {
fZ0zn6d51TgVqID : {
05E1JSFYVHJlGVP : {}
}
}
}
并将其更改为
u1fsQExd1aZmnpL : {
subfields : {
2FNdVdkaefaD6xQ : {
subfields : {
fZ0zn6d51TgVqID : {
subfields : {
05E1JSFYVHJlGVP : {
subfields : {}
}
}
}
}
}
}
}
然而,结果是:
u1fsQExd1aZmnpL : {
subfields : {
2FNdVdkaefaD6xQ : {
fZ0zn6d51TgVqID : {
subfields : {
05E1JSFYVHJlGVP : {}
}
}
}
}
}
注意:它错过了第二个“子字段”
步骤
它每秒钟循环一次。ie:添加到05E1JSFYVHJlGVP
的下一个ID将在其内部,没有子字段
父字段,但它将在其内部有子字段
子字段
我的方法是:
function get_into_subfields(form_structure) {
for(var mainid in form_structure) {
if(!form_structure[mainid].hasOwnProperty('subfields')) {
form_structure[mainid]['subfields'] = {};
}
for(var key in form_structure[mainid]) {
if(key != 'subfields') {
form_structure[mainid]['subfields'][key] = get_into_subfields(form_structure[mainid][key]);
delete(form_structure[mainid][key]);
}
}
}
return form_structure;
}
你知道我做错了什么吗
编辑:
这非常简单,但我认为您的函数有点复杂。问题是您不希望第一个是
子字段
对象,但为什么不呢?这将使它变得更简单,只需将.subview
添加到结果中,即可获得相同的结果
var obj={'u1fsQExd1aZmnpL':{'2FNdVdkaefaD6xQ':{'fZ0zn6d51TgVqID':{'05E1JSFYVHJlGVP':{}
功能子字段(数据){
//只需创建一个可以返回的标准对象
var result={子字段:{};
for(var输入数据){
//现在递归地添加它
结果.子字段[键]=子字段(数据[键])
}
返回结果;
}
log(“完整结果”,子字段(obj));
console.log('忽略返回的初始子字段',子字段(obj).subfields);
document.write(“”+JSON.stringify(subfields(obj).subfields)+“”)
只需获取所有键并迭代属性即可。如果项目是对象,则迭代该项目
功能go(r,o){
Object.keys(o).forEach(函数(k){
r[k]={子字段:{};
o[k]=='object'和&go(r[k]。子字段,o[k]);
});
}
var source={'u1fsQExd1aZmnpL':{'2FNdVdkaefaD6xQ':{'fZ0zn6d51TgVqID':{'05E1JSFYVHJlGVP':{},
目标={};
go(目标、来源);
document.write(“”+JSON.stringify(target,0,4)+“”)你能把这个问题归结为要点吗?我的印象是,这是一个非常浮夸的简单问题。基本上,您需要一个函数,该函数接受一个对象并将其属性“移动”到另一个对象,该对象存储为其属性子字段
?@JonSurrell是的,我想采取每一步并在它们之间插入一个子字段
键。您是否可以尝试编辑您的问题以使其清晰?这很有效,但是第一个不应该是子字段
值,因为我正在构建一个问题/表单生成器,树的开头(u1fsQExd1aZmnpL
)是主要问题,下面是子问题that@Haring10我知道,但你似乎不知道你能多么容易地把它弄出来。由于您的函数是一致的,您可以通过执行subfields(obj)来轻松获得初始子字段结果。subfields
将初始字段作为第一个对象。我提供了一个对我的代码片段的更新,以准确地显示这一点。我不知道文档。write
可以用于SO代码片段。它过去常常出错。。。酷!