Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.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中的平面文件创建分层层次结构?_Javascript_Arrays_Loops_Hierarchy - Fatal编程技术网

如何从javascript中的平面文件创建分层层次结构?

如何从javascript中的平面文件创建分层层次结构?,javascript,arrays,loops,hierarchy,Javascript,Arrays,Loops,Hierarchy,我正在尝试基于当前平面数据集创建分层数据集。所以我需要的是: [0…99] 0:对象 类型:“喜剧-音乐剧” 工作室:“派拉蒙” 标题“泰坦尼克号” 1:对象 类型:“喜剧-音乐剧” 工作室:“布埃纳维斯塔” 标题“怪物公司” 2:对象 诸如此类 我想要这个: 0:对象 类型:“喜剧-音乐剧” 工作室:“派拉蒙” 标题:“泰坦尼克号” 标题:“另一个标题” 工作室:“布埃纳维斯塔” 标题:“怪物公司” 我想不出一个方法来实现这一点。我只得到了2层的层次结构,但

我正在尝试基于当前平面数据集创建分层数据集。所以我需要的是:

  • [0…99]
    • 0:对象
      • 类型:“喜剧-音乐剧”
      • 工作室:“派拉蒙”
      • 标题“泰坦尼克号”
    • 1:对象
      • 类型:“喜剧-音乐剧”
      • 工作室:“布埃纳维斯塔”
      • 标题“怪物公司”
    • 2:对象
诸如此类

我想要这个:

  • 0:对象
    • 类型:“喜剧-音乐剧”
      • 工作室:“派拉蒙”
        • 标题:“泰坦尼克号”
        • 标题:“另一个标题”
      • 工作室:“布埃纳维斯塔”
        • 标题:“怪物公司”
我想不出一个方法来实现这一点。我只得到了2层的层次结构,但我需要第三层。任何帮助都将不胜感激

我有这个方法

function formatObjectToTreeStructure(data, filterName) {

            var filterList = [], allFilterList = [], constructedObject = [];

            data.children = data.data;

            for (var key in data.children[0]) {
                allFilterList.push(key);
            }

            for (var index = 0; index < data.children.length; index++) {
                var temp = null;
                var filterIndex = filterList.indexOf(data.children[index][filterName]);
                if (filterIndex == -1) {
                    filterList.push(data.children[index][filterName]);
                    temp = {};
                    temp[filterName] = data.children[index][filterName];
                    temp.children = [];

                    var tempChildren = {};
                    tempChildren[data.dataTableAlign.group1] = data.children[index][data.dataTableAlign.group1];
                    tempChildren[data.dataTableAlign.group2] = data.children[index][data.dataTableAlign.group2];
                    tempChildren[data.dataTableAlign.group3] = data.children[index][data.dataTableAlign.group3];

                    temp.children.push(tempChildren);

                    constructedObject.push(temp);

                } else {
                    var tempChildren = {};
                    tempChildren[data.dataTableAlign.group1] = data.children[index][data.dataTableAlign.group1];
                    tempChildren[data.dataTableAlign.group2] = data.children[index][data.dataTableAlign.group2];
                    tempChildren[data.dataTableAlign.group3] = data.children[index][data.dataTableAlign.group3];

                    constructedObject[filterIndex].children.push(tempChildren);
                }
            }
            return constructedObject;

        }
函数格式ObjectToTreeStructure(数据、筛选器名称){
var filterList=[],allFilterList=[],constructedObject=[];
data.children=data.data;
for(数据中的var键。子项[0]){
所有过滤器列表。按下(键);
}
对于(var index=0;index

但这是我所能做到的。不过,它只有两个层次。我有流派和儿童题材,但我似乎不知道如何获得同一工作室的所有标题。

也许你可以这样做

功能波纹(数据){
返回数据。减少((t,o)=>{
t[o.genre]?t[o.genre][o.studio]?t[o.genre][o.studio]。推送(o.title)
:t[o.genre][o.studio]=[o.title]
:t[o.genre]={[o.studio]:[o.title]};
返回t;
},{});
}
var list=[{类型:“喜剧”,工作室:“性病A”,标题:“电影01”},
{类型:“喜剧”,工作室:“Std_B”,标题:“Movie_02”},
{体裁:“西部”,工作室:“Std_A”,标题:“Movie_03”},
{类型:“惊悚片”,工作室:“Std_A”,标题:“Movie_04”},
{类型:“动作”,工作室:“Std_C”,标题:“Movie_05”},
{类型:“惊悚片”,工作室:“Std_C”,标题:“Movie_06”},
{类型:“西部”,工作室:“Std_B”,标题:“Movie_09”},
{类型:“惊悚片”,工作室:“Std_B”,标题:“Movie_10”},
{类型:“动作”,工作室:“性病A”,标题:“电影11”},
{类型:“西部”,工作室:“Std_D”,标题:“电影12”},
{类型:“喜剧”,工作室:“性病”,标题:“电影13”},
{类型:“动作”,工作室:“性病C”,标题:“电影14”},
{类型:“西部”,工作室:“Std_D”,标题:“电影15”},
{类型:“惊悚片”,工作室:“Std_A”,标题:“Movie_16}];

log(JSON.stringify(corrugate(list),null,4))到目前为止您尝试了什么?StackOverflow不是一个“为我编写代码”的网站。我编辑了这个问题