我有一个复杂的json文件,我必须使用javascript来使其分层,以便以后构建一个树.json的每个条目都有:id:唯一id,parentId:父节点的id(如果节点是树的根,则为0)level:树中的深度级别
json数据已经"排序".我的意思是一个条目将在其上方拥有父节点或兄弟节点,并且在其自身下面是子节点或兄弟节点.
输入:
{
"People": [
{
"id": "12",
"parentId": "0",
"text": "Man",
"level": "1",
"children": null
},
{
"id": "6",
"parentId": "12",
"text": "Boy",
"level": "2",
"children": null
},
{
"id": "7",
"parentId": "12",
"text": "Other",
"level": "2",
"children": null
},
{
"id": "9",
"parentId": "0",
"text": "Woman",
"level": "1",
"children": null
},
{
"id": "11",
"parentId": "9",
"text": "Girl",
"level": "2",
"children": null
}
],
"Animals": [
{
"id": "5",
"parentId": "0",
"text": "Dog",
"level": "1",
"children": null …Run Code Online (Sandbox Code Playgroud) 我有一个嵌套的数组树,它是由具有以下功能的平面数组生成的:
function convertToTree(array $flat, $idField = 'id',
$parentIdField = 'parentId',
$childNodesField = 'childNodes') {
$indexed = array();
// first pass - get the array indexed by the primary id
foreach ($flat as $row) {
$indexed[$row[$idField]] = $row;
$indexed[$row[$idField]][$childNodesField] = array();
}
//second pass
$root = null;
foreach ($indexed as $id => $row) {
$indexed[$row[$parentIdField]][$childNodesField][$id] =& $indexed[$id];
if (!$row[$parentIdField]) {
$root = $id;
}
}
return array($root => $indexed[$root]);
}
Run Code Online (Sandbox Code Playgroud)
我需要为数组的每个节点添加一个条目“ NUMBER OF LEAVES”。该条目应计算该节点所有子节点的所有叶子:
Array (
[9] => Array (
[id] …Run Code Online (Sandbox Code Playgroud) 我有一个在extjs 4.x中生成的树,我需要计算任何节点,即该节点的叶子数.我的意思是叶子的总数,这也意味着该节点的"子节点"的叶子.我看到有一种级联方法,但我无法使用它.