【发布时间】:2018-04-11 11:43:44
【问题描述】:
我有一个类似于下面的数据集:
dataSet = {rows: [
{"ID":0, "Value":10, "HIERARCHY_LEVEL":1},
{"ID":1, "Value":20, "HIERARCHY_LEVEL":2},
{"ID":2, "Value":55, "HIERARCHY_LEVEL":3},
{"ID":3, "Value":77, "HIERARCHY_LEVEL":2},
{"ID":4, "Value":29, "HIERARCHY_LEVEL":3},
{"ID":5, "Value":44, "HIERARCHY_LEVEL":4},
{"ID":6, "Value":34, "HIERARCHY_LEVEL":5},
{"ID":7, "Value":56, "HIERARCHY_LEVEL":4},
{"ID":8, "Value":23, "HIERARCHY_LEVEL":2},
{"ID":9, "Value":23, "HIERARCHY_LEVEL":3},
{"ID":10, "Value":23, "HIERARCHY_LEVEL":1},
{"ID":11, "Value":23, "HIERARCHY_LEVEL":2},
{"ID":12, "Value":23, "HIERARCHY_LEVEL":2},
{"ID":13, "Value":23, "HIERARCHY_LEVEL":3},
]}
我想按层级重新排列这个dataSet,所以每个层级都放入前一个对象的children属性数组中,如下所示:
注意:数据集按原样(按顺序)加载。此外,是否所有对象都具有
children属性并不重要。
(我已尝试将其格式化以便于阅读)
newDataSet = [
{"ID":0, "Value":10, "HIERARCHY_LEVEL":1, "children":[
{"ID":1, "Value":20, "HIERARCHY_LEVEL":2, "children":[
{"ID":2, "Value":55, "HIERARCHY_LEVEL":3}
]},
{"ID":3, "Value":77, "HIERARCHY_LEVEL":2, "children":[
{"ID":4, "Value":29, "HIERARCHY_LEVEL":3, "children":[
{"ID":5, "Value":44, "HIERARCHY_LEVEL":4, "children":[
{"ID":6, "Value":34, "HIERARCHY_LEVEL":5}
]},
{"ID":7, "Value":56, "HIERARCHY_LEVEL":4}
]}
]},
{"ID":8, "Value":23, "HIERARCHY_LEVEL":2, "children":[
{"ID":9, "Value":23, "HIERARCHY_LEVEL":3}
]}
]},
{"ID":10, "Value":23, "HIERARCHY_LEVEL":1, "children":[
{"ID":11, "Value":23, "HIERARCHY_LEVEL":2},
{"ID":12, "Value":23, "HIERARCHY_LEVEL":2, "children":[
{"ID":13, "Value":23, "HIERARCHY_LEVEL":3}
]}
]}
]
编辑
我当前的代码
let newResults = [];
let topHierarchyLevel = 1;
let resultCounter = (newResults.length - 1); //Get the 2nd last element of newResults
let currentLevel = 2;
let loopCounter = 0;
for (loopCounter; loopCounter < dataSet.rows.length; loopCounter++) {
let row = dataSet.rows[loopCounter];
row["children"] = [];
if (row.HIERARCHY_LEVEL == topHierarchyLevel) {
newResults.push(row);
resultCounter++;
} else {
if (row.HIERARCHY_LEVEL == 2) {
newResults[resultCounter].children.push(row);
currentLevel++;
} else if (row.HIERARCHY_LEVEL > 2) {
newResults[resultCounter-1].children.children.push(row);
currentLevel++;
resultCounter++;
} else {
currentLevel--;
resultCounter--;
loopCounter--;
}
}
}
【问题讨论】:
-
...您有问题吗? SO 不是代码编写服务。
-
@jonrsharpe 您将如何遍历每个级别并将其添加到相应的层次结构级别?
-
你到底坚持哪一部分?例如,您知道如何遍历数组吗?如果没有,介绍性教程将比 SO 问题更合适。请提供minimal reproducible example 显示您尝试过的内容以及您必须到达的确切位置。
-
是的,我能够遍历数组并找到我当前所在的层次结构。但是,随着级别的进行,我无法将该行添加到嵌套的
children属性中
标签: javascript arrays typescript object