Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
另一个循环中的Javascript循环生成2个列表_Javascript - Fatal编程技术网

另一个循环中的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的解决方案会更好。谢谢你指出我需要重读这篇文章!!!请修改您的解决方案,这样我就不必删除您的投票@佩格斯-你是对的,我正在考虑删除我的答案,但更新它是一个更好的解决方案:-祝你周末愉快!