簡體   English   中英

另一個循環內的Javascript循環生成2個列表

[英]Javascript Loop inside another loop make 2 lists

我有一些看起來像這樣的數據:

{
    "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
    }]
}

為此,我需要創建2個列表:

為了創建包含所有電源的第一個列表...我已經這樣做了:

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個名稱(在本例中)。

現在我需要做的是獲取每個主要對象的子名稱

因此,子列表(在這種情況下將返回)

主1的“ sub 1,sub 2和sub 3”,主2的“ sub 1和sub 2”等...

我怎樣才能做到這一點?

您實際上在問題標題中有一個正確的想法-嵌套循環,您需要像這樣迭代每個“ main”中的內部subs

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;
}

我已將sublist更改為對象,然后將“子”放入臨時數組中,然后再將它們作為鍵控數組(其中的鍵是主名稱)插入sublist ,現在可以像sublist['main 2']以接收所有相關的訂閱

您可以對主name為key的子列表使用其他數據結構。

 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.create(null); data.mains.forEach(function (main) { mainlist.push(main.name); sublist[main.name] = main.subs.map(function (sub) { return sub.name; }); }) console.log(mainlist); console.log(sublist['main 1']); console.log(sublist); 
 .as-console-wrapper { 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM