嵌套循环未形成完整对象 - 问题
Nested loops not forming the full object - issue
我有一个如下所示的array of objects
:
[
{
"__v": 0,
"_id": "5634fa3df925a0ac02f1b0fa",
"groupname": "group 1",
"subgroups": [
{
"__v": 0,
"_id": "5634fa63f925a0ac02f1b0fc",
"subgroupname": "subgroup 1",
"books": [
{
"bookname": {
"name": "sasasasasasP"
}
}
]
]
},
{
"__v": 0,
"_id": "5634fa3df925a0ac02f1b0fd",
"groupname": "group 2",
"subgroups": [
{
"__v": 0,
"_id": "5634fa63f925a0ac02f1befc",
"subgroupname": "subgroup 2",
"books": [
{
"bookname": {
"name": "book 2"
}
}
]
]
}
]
我想从上面的对象下面形成一个这样的array of objects
。
[
{
"groupname": "Group 1",
"subgroupname": "subgroup 1",
"bookname": "Enersol"
},
{
"groupname": "Group 2",
"subgroupname": "subgroup 2",
"bookname": "Enersol"
}
]
下面是我尝试过的,但是在数组中形成第一个对象后循环失败。
var apiListData = [];
for (var i = 0, len = groups.length; i < len; i++) {
for (var j = 0, len = groups[i].subgroups.length; j < len; j++) {
for (var k = 0, len = groups[i].subgroups[j].books.length; k < len; k++) {
apiListData.push({
gname: groups[i].groupname,
sname: groups.[i].subgroups[j].subgroupname,
bookname: groups[i].subgroups[j].books[k].bookname
})
}
}
}
请看一下 http://jsfiddle.net/es47k33o/
这里有多个错误:
- 您提供的 JSON 结构非常混乱,它固定在小提琴中
- 错别字:
sname: groups.[i].subgroups[j].subgroupname
中有一个点太多 - 要访问书名的字符串值,您必须获得比
bookname: groups[i].subgroups[j].books[k].bookname
更深的级别 - 你在这里的实际算法问题是你总是重新声明变量 len。我根据各自的索引重命名了第二个和第三个:
var apiListData = [];
for (var i = 0, len = groups.length; i < len; i++) {
for (var j = 0, lenj = groups[i].subgroups.length; j < lenj; j++) {
for (var k = 0, lenk = groups[i].subgroups[j].books.length; k < lenk; k++) {
apiListData.push({
gname: groups[i].groupname,
sname: groups[i].subgroups[j].subgroupname,
bookname: groups[i].subgroups[j].books[k].bookname.name
})
}
}
}
请尝试此 JSFiddle 示例并查看浏览器控制台日志。
首先,您的JSON
已损坏,每个组中缺少一个}
,这是一个有效的:
var groups = [{
"__v": 0,
"_id": "5634fa3df925a0ac02f1b0fa",
"groupname": "group 1",
"subgroups": [{
"__v": 0,
"_id": "5634fa63f925a0ac02f1b0fc",
"subgroupname": "subgroup 1",
"books": [{
"bookname": {
"name": "sasasasasasP"
}
}]
}]
}, {
"__v": 0,
"_id": "5634fa3df925a0ac02f1b0fd",
"groupname": "group 2",
"subgroups": [{
"__v": 0,
"_id": "5634fa63f925a0ac02f1befc",
"subgroupname": "subgroup 2",
"books": [{
"bookname": {
"name": "book 2"
}
}]
}]
}];
除了 Dochow @Stefan识别的代码中的其他问题之外,最好使用变量来标识这种具有嵌套循环的逻辑中的对象。 下面是一个示例:
var apiListData = [];
for (var i = 0, totalGroups = groups.length; i < totalGroups; i++) {
var group = groups[i];
var subGroups = group.subgroups;
for (var j = 0, totalSubGroups = subGroups.length; j < totalSubGroups; j++) {
var subGroup = subGroups[j];
var books = subGroup.books;
for (var k = 0, totalBooks = books.length; k < totalBooks; k++) {
var book = books[k].bookname;
apiListData.push({
groupName: group.groupname,
subGroupName: subGroup.subgroupname,
bookName: book.name
});
}
}
}
console.log('apiListData', apiListData);
相关文章:
- JavaScript代码问题:我正在将对象转换为数组
- jquery$(this)对象缺少问题
- JavaScript对象继承问题
- 在对象中添加方法时出现问题
- 基本对象/原型语法问题
- Javascript对象文字,POST问题
- 使用Javascript对象为具有两个背景图像的DIV设置样式时出现问题
- 使用.map解析JSON对象时出现问题
- 类中对象的奇怪问题(John Resig简单继承)
- 访问Javascript对象-Node.js的作用域问题
- JavaScript对象中存在数组的问题
- 递归Javascript对象是否会导致任何问题(内存泄漏)
- JavaScript—父类和子类/对象的此问题
- 我该如何解决这个问题;参考网格”;在JavaScript中完成的对象数
- jQuery拖动到相对位置的可排序列表中时出现可拖动辅助对象位置问题
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 创建jQuery对象时出现问题
- 面向对象,控制器问题,初学者Javascript
- 从 JSON 对象获取数据时出现问题
- Rails的问题,haml + javascript在字段对象的模糊