另一个循环中的Javascript循环生成2个列表
我有一些数据如下所示:另一个循环中的Javascript循环生成2个列表,javascript,Javascript,我有一些数据如下所示: { "mains": [{ "id": "454", "name": "main 1", "subs": [{ "id": "32", "name": "sub 1" }, { "id": "23", "name": "sub 2" }, { "id": "54",
{
"mains": [{
"id": "454",
"name": "main 1",
"subs": [{
"id": "32",
"name": "sub 1"
}, {
"id": "23",
"name": "sub 2"
}, {
"id": "54",
"name": "sub 3"
}],
"image": null
}, {
"id": "654",
"name": "main 2",
"subs": [{
"id": "87",
"name": "sub 1"
}, {
"id": "78",
"name": "sub 2"
}],
"image": null
}]
}
mainlist = [];
sublist = {};
for (var i = 0; i < data.mains.length; i++) {
var obj = data.mains[i];
var mnlst = obj.name;
mainlist.push(mnlst);
var tempArr = [];
for(var j = 0; j < obj.subs.length ; j++){
var subObj = obj.subs[j];
var sblst = subObj.name;
tempArr.push(sblst);
}
sublist[mnlst] = tempArr;
}
由此,我需要创建两个列表:
为了创建第一个包含所有电源的列表…我已经完成了以下操作:
mainlist = [];
sublist = [];
for (var i = 0; i < data.mains.length; i++) {
var obj = data.mains[i];
var mnlst = obj.name;
mainlist.push(mnlst);
}
console.log(mainlist);
在本例中,它将返回干线的名称,在本例中产生2个名称
现在我需要做的是得到每个主节点的子节点的名称
因此,在这种情况下,子列表将返回
“sub 1、sub 2和sub 3”用于主管道1,而“sub 1和sub 2”用于主管道2等
我怎样才能做到这一点?您的问题标题中实际上有正确的想法-嵌套循环,您需要像下面这样迭代每个main中的内部sub:
{
"mains": [{
"id": "454",
"name": "main 1",
"subs": [{
"id": "32",
"name": "sub 1"
}, {
"id": "23",
"name": "sub 2"
}, {
"id": "54",
"name": "sub 3"
}],
"image": null
}, {
"id": "654",
"name": "main 2",
"subs": [{
"id": "87",
"name": "sub 1"
}, {
"id": "78",
"name": "sub 2"
}],
"image": null
}]
}
mainlist = [];
sublist = {};
for (var i = 0; i < data.mains.length; i++) {
var obj = data.mains[i];
var mnlst = obj.name;
mainlist.push(mnlst);
var tempArr = [];
for(var j = 0; j < obj.subs.length ; j++){
var subObj = obj.subs[j];
var sblst = subObj.name;
tempArr.push(sblst);
}
sublist[mnlst] = tempArr;
}
我已经将子列表更改为一个对象,在将子列表作为键控数组插入子列表之前,我将子列表放入一个临时数组中,其中键是主名称现在您可以像子列表['main 2']一样使用它来接收所有相关的子列表您在问题标题中的想法是正确的-嵌套循环,您需要迭代每个main中的内部sub,如下所示:
{
"mains": [{
"id": "454",
"name": "main 1",
"subs": [{
"id": "32",
"name": "sub 1"
}, {
"id": "23",
"name": "sub 2"
}, {
"id": "54",
"name": "sub 3"
}],
"image": null
}, {
"id": "654",
"name": "main 2",
"subs": [{
"id": "87",
"name": "sub 1"
}, {
"id": "78",
"name": "sub 2"
}],
"image": null
}]
}
mainlist = [];
sublist = {};
for (var i = 0; i < data.mains.length; i++) {
var obj = data.mains[i];
var mnlst = obj.name;
mainlist.push(mnlst);
var tempArr = [];
for(var j = 0; j < obj.subs.length ; j++){
var subObj = obj.subs[j];
var sblst = subObj.name;
tempArr.push(sblst);
}
sublist[mnlst] = tempArr;
}
我已经将子列表更改为一个对象,在将子列表作为键控数组插入子列表之前,我将子列表放入一个临时数组中,其中键是主名称。现在,您可以像子列表['main 2']一样使用它来接收所有相关子列表。您可以为子列表使用另一个数据结构,将主名称作为键 var data={mains:[{id:454,name:main 1,subs:[{id:32,name:sub 1},{id:23,name:sub 2},{id:54,name:sub 3}],image:null},{id:654,name:main 2,subs:[{id:87,name:sub 1},{id:78,name:sub 2}],image:null}, mainlist=[], sublist=Object.createnull; data.mains.forEachfunction main{ mainlist.pushmain.name; 子列表[main.name]=main.subs.mapfunction子{ 返回sub.name; }; } console.logmainlist; console.logsublist['main 1']; console.logsublist;
.as console wrapper{max height:100%!important;top:0;}您可以为子列表使用另一个数据结构,并将main的名称作为键 var data={mains:[{id:454,name:main 1,subs:[{id:32,name:sub 1},{id:23,name:sub 2},{id:54,name:sub 3}],image:null},{id:654,name:main 2,subs:[{id:87,name:sub 1},{id:78,name:sub 2}],image:null}, mainlist=[], sublist=Object.createnull; data.mains.forEachfunction main{ mainlist.pushmain.name; 子列表[main.name]=main.subs.mapfunction子{ 返回sub.name; }; } console.logmainlist; console.logsublist['main 1']; console.logsublist;
.作为控制台包装{max height:100%!important;top:0;}让我们修改您的代码
mainlist = [];
sublist = [];
for (var i = 0; i < data.mains.length; i++) {
var obj = data.mains[i];
var mnlst = obj.name;
//--[Start Modification]--
var subArr = obj.subs;
for(var j = 0; j < subArr.length; j++)
{
var subName = subArr[i].name;
//Here you have subject name, do whatever you want to do with it.
}
//--[End Modification]--
mainlist.push(mnlst);
}
console.log(mainlist);
让我们修改您的代码
mainlist = [];
sublist = [];
for (var i = 0; i < data.mains.length; i++) {
var obj = data.mains[i];
var mnlst = obj.name;
//--[Start Modification]--
var subArr = obj.subs;
for(var j = 0; j < subArr.length; j++)
{
var subName = subArr[i].name;
//Here you have subject name, do whatever you want to do with it.
}
//--[End Modification]--
mainlist.push(mnlst);
}
console.log(mainlist);
你可以为每一个主要的子列表。子列表应该是什么样子的?基本上我会有一个select,所以如果我选择Main 1。。。。然后它会给我sub1,Sub2,Sub3。。。因此,第一个列表将填充下拉菜单,另一个列表将为每个主菜单的每个选择提供sub,并提供一个单独的sub列表。子列表应该是什么样子的?基本上我会有一个select,所以如果我选择Main 1。。。。然后它会给我sub1,Sub2,Sub3。。。因此,第一个列表将填充下拉菜单,另一个列表将为我提供每个selectionGood solution的SUB。我本该怎么做才能让他知道嵌套循环是如何工作的。谢谢@Pegues-但实际上在Nina向OP澄清之后-我明白这不是他需要的,她的答案是这种情况下最好的答案。重新阅读OP发布的内容,现在听起来他在寻找Nina提供的解决方案。对您来说,修改代码以满足OP需求非常容易,但是是的,Nina的解决方案会更好。谢谢你指出我需要重读这篇文章!!!请修改您的解决方案,这样我就不必删除您的投票@佩格斯-你是对的,我正在考虑删除我的答案,但更新它是一个更好的解决方案:-祝你周末愉快!很好的解决方案。我本该怎么做才能让他知道嵌套循环是如何工作的。谢谢@Pegues-但实际上在Nina向OP澄清之后-我明白这不是他需要的,她的答案是这种情况下最好的答案。重新阅读OP发布的内容,现在听起来他在寻找Nina提供的解决方案。对您来说,修改代码以满足OP需求非常容易,但是是的,Nina的解决方案会更好。谢谢你指出我需要重读这篇文章!!!请修改您的解决方案,这样我就不必删除您的投票@佩格斯-你是对的,我正在考虑删除我的答案,但更新它是一个更好的解决方案:-祝你周末愉快!