递归 JS 函数每秒错过一次循环
Recursive JS function misses every second loop
>我有一个函数来采用
u1fsQExd1aZmnpL : {
2FNdVdkaefaD6xQ : {
fZ0zn6d51TgVqID : {
05E1JSFYVHJlGVP : {}
}
}
}
并将其更改为
u1fsQExd1aZmnpL : {
subfields : {
2FNdVdkaefaD6xQ : {
subfields : {
fZ0zn6d51TgVqID : {
subfields : {
05E1JSFYVHJlGVP : {
subfields : {}
}
}
}
}
}
}
}
但是,它的结果是:
u1fsQExd1aZmnpL : {
subfields : {
2FNdVdkaefaD6xQ : {
fZ0zn6d51TgVqID : {
subfields : {
05E1JSFYVHJlGVP : {}
}
}
}
}
}
注意:它错过了第二'subfields'
步骤。
它每隔一个循环执行此操作。 即:添加到05E1JSFYVHJlGVP
的下一个 ID 将位于其中,没有subfields
父级,但它内部将有一个subfields
子级。
我的方法是:
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;
}
关于我做错了什么的任何想法?
编辑:
这是 JSFiddle
只需获取所有键并迭代属性即可。如果该项是对象,则循环访问该项。
function go(r, o) {
Object.keys(o).forEach(function (k) {
r[k] = { subfields: {} };
typeof o[k] === 'object' && go(r[k].subfields, o[k]);
});
}
var source = { 'u1fsQExd1aZmnpL': { '2FNdVdkaefaD6xQ': { 'fZ0zn6d51TgVqID': { '05E1JSFYVHJlGVP': {} } } } },
target = {};
go(target, source);
document.write('<pre>' + JSON.stringify(target, 0, 4) + '</pre>');
这是非常简单的,但我认为你的函数有点复杂。问题是你不希望第一个是subfields
的对象,但为什么不呢?这将使它更容易,您只需在结果中添加.subviews
即可获得相同的结果。
var obj = {'u1fsQExd1aZmnpL' : {'2FNdVdkaefaD6xQ' : {'fZ0zn6d51TgVqID' : { '05E1JSFYVHJlGVP' : {}}}}}
function subfields(data){
// Simply create a standard object that you can return
var result = {subfields:{}};
for(var key in data){
// now recursively add it
result.subfields[key] = subfields(data[key])
}
return result;
}
console.log('The full result', subfields(obj));
console.log('Ignore the initial subfield returned', subfields(obj).subfields);
document.write('<pre>' + JSON.stringify(subfields(obj).subfields) + '</pre>')
这将在链的末端留下一个空对象,假设这不是问题,尽管您仍然可以做很多事情来确保这不会出错,但基本工作。
相关文章:
- Javascript返回值只在循环中返回一次
- For循环在Jquery中只运行一次
- 可能只在for循环内部运行一次代码块
- mongoose.js Model.remove在循环中只能工作一次
- 循环遍历数组并仅获取一次相同的值
- Jquery 循环一次或在数据数组中显示一次数据
- 一次循环遍历一组
- 如何在if循环中只执行一次
- AJAX在数组循环中调用,只在上一次完成后调用next
- 正在加载“"循环,每3秒更改一次文本
- 我怎么能有一个实时计时器,在3秒的循环内每秒钟更新一次
- 在Javascript中每五秒钟循环一次
- 如何一次运行一次循环javascript
- 使用胡须.js一次循环访问一个测验项目
- 递归 JS 函数每秒错过一次循环
- 使用 javascript 一次循环播放 4 个以上的声音
- 为什么我的循环只有一次循环,即使有3个项目
- 在下一次循环迭代之前等待promise结果
- Jquery 一次循环和绑定 10 条记录
- JavaScript在同一循环中每x次迭代一次循环