从 Javascript 中的两个平面结构化数组格式化 JSON

Format JSON from two flat structured array in Javascript

我需要从两个链接在一起的平面结构化数组中创建一个嵌套 JSON,我能够获得第一层但无法将其嵌套在 javascript 中。

下面是问题陈述。

我有 2 个数组:

data = ["HSP - FS", "FS-M", "Lo Co", "GO A", "CQM","whatever"];

type = ["Epic","Sub - Epic","Sub - Epic","Epic","Sub - Epic","Story"];

type 数组和 data 数组链接在一起,类型和描述在同一个索引上,如

type[0]data[0],所以它将是 "Epic: HSP-FS",但这并没有到此结束,这个 Epic 还有 child 个元素,它们是 Sub - Epics 和它们的描述放在同一个数组元素下,所以 type[1] 即 "Sub-Epic" 在 data[1] 中有它的数据,即 "FS-M" 等等直到下一个 "Epic" 在类型数组中找到。

所以 JSON 就像

{0:{
        Epic: "HSP - FS",
        Sub-Epic:"FS-M",
        Sub-Epic:"Lo Co"
    },    
    1:{
        Epic: "GO A",
        Sub-Epic:"CQM",
        Story:"whatever"
    }}

数组和JSON的结构是固定的,甚至数组可以有任意数量的Epics、子Epics或故事,但顺序将保持在所有child 的 Epics 将在那里直到下一次史诗出现。

问题是我无法编写循环来获取输出..到目前为止我已经尝试过迭代和连接这两个数组

提前感谢您的帮助。

您不能在 JSON 对象中重复命名属性,但您可以改用数组:

var array = [];

for(var i=0; i < data.length; ++i)
{
    var t = type[i];
    var d = data[i];


    if (t == "Epic")
    {
         array.push({ "Epic": d});
    }
    else
    {
         if(typeof(array[array.length-1][t]) == "undefined")
         {
             array[array.length-1][t] = [];
         }

         array[array.length-1][t].push(d)        
    }
}

这是结果 JSON:

[{
    "Epic": "HSP - FS",
    "Sub - Epic": ["FS-M","Lo Co"]
 },    
 {
    "Epic": "GO A",
    "Sub - Epic": ["CQM"],
    "Story": ["whatever"]
 }]