【问题标题】:How to create a tiered hierarchy from a flat file in javascript?如何从 javascript 中的平面文件创建分层层次结构?
【发布时间】:2016-08-09 14:36:15
【问题描述】:

我正在尝试根据我当前的平面数据集创建一个分层数据集。所以我需要的是这样的:

  • [0 … 99]
    • 0:对象
      • 类型:“喜剧 - 音乐”
      • 工作室:“派拉蒙”
      • 标题““泰坦尼克号”
    • 1:对象
      • 类型:“喜剧 - 音乐”
      • 工作室:“布埃纳维斯塔”
      • 标题”“Monsters, Inc.”
    • 2:对象

以此类推

我想要这个:

  • 0:对象
    • 类型:“喜剧 - 音乐”
      • 工作室:“派拉蒙”
        • 片名:《泰坦尼克号》
        • 标题:“另一个标题”
      • 工作室:“布埃纳维斯塔”
        • 标题:“Monsters, Inc.”

我想不出一种方法来实现这一点。我只获得了 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;

        }

但这是就我所知。虽然它只有两个层次。我得到了 Genre 和它的孩子,但我似乎无法弄清楚如何获得同一个工作室的所有标题。

【问题讨论】:

  • 到目前为止你尝试过什么? StackOverflow 不是“为我编写代码”的网站。
  • 我编辑了问题

标签: javascript arrays loops hierarchy


【解决方案1】:

也许你可以这样做;

function corrugate(data){
  return data.reduce((t,o) => {
                                t[o.genre]  ? t[o.genre][o.studio] ? t[o.genre][o.studio].push(o.title)
                                                                   : t[o.genre][o.studio] = [o.title]
                                            : t[o.genre] = {[o.studio]: [o.title]};
                                return t;
                              },{});
}

var list =[{genre:"Comedy", studio: "Std_A", title: "Movie_01"},
           {genre:"Comedy", studio: "Std_B", title: "Movie_02"},
           {genre:"Western", studio: "Std_A", title: "Movie_03"},
           {genre:"Thriller", studio: "Std_A", title: "Movie_04"},
           {genre:"Action", studio: "Std_C", title: "Movie_05"},
           {genre:"Thriller", studio: "Std_C", title: "Movie_06"},
           {genre:"Western", studio: "Std_B", title: "Movie_09"},
           {genre:"Thriller", studio: "Std_B", title: "Movie_10"},
           {genre:"Action", studio: "Std_A", title: "Movie_11"},
           {genre:"Western", studio: "Std_D", title: "Movie_12"},
           {genre:"Comedy", studio: "Std_D", title: "Movie_13"},
           {genre:"Action", studio: "Std_C", title: "Movie_14"},
           {genre:"Western", studio: "Std_D", title: "Movie_15"},
           {genre:"Thriller", studio: "Std_A", title: "Movie_16"}];

console.log(JSON.stringify(corrugate(list),null,4));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2021-11-28
    • 2016-02-21
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多