我想从下面的列表中提取特定父节点的子元素。 这些元素将按升序排列。
arr = [
'1',
'1.1',
'2',
'2.1',
'2.2',
'2.3',
'2.4',
'3',
'3.1',
'3.2',
'3.2.1',
'3.2.2',
'3.3',
'3.4',
'3.5',
'3.6',
'3.7',
'3.7.1',
'3.7.2'
];
对于每个元素,我想要这种格式的东西。
parsed = [
{id: '3', childrens:[
{id:'3.1', childrens: [] },
{id:'3.2', childrens: [
{id:'3.2.1', childrens: [] },
{id:'3.2.2', childrens: [] }
] },
{id:'3.3', childrens: [] },
{id:'3.4', childrens: [] },
{id:'3.5', childrens: [] },
{id:'3.6', childrens: [] },
{id:'3.7', childrens: [
{id:'3.7.1', childrens: [] },
{id:'3.7.2', childrens: [] }
] }
]}
];
我想将解析后的JSON传递给Tree Grid。 我试着为它写一个函数
function getChilds (str){
if(arr[arr.length - 1]+'.' === str)
return;
var childs = [];
var task = new Object();
for(var i = 0 ; i < arr.length ; i++ ){
if( arr[i].localeCompare(str) > 0 ){
task.id=arr[i];
childs.push(task);
tasks.push(task);
console.log(tasks);
}
}
};
答案 0 :(得分:0)
您可以获取给定的字符串,按点拆分并将值作为嵌套哈希表的路径,从而使组保持相同的级别。
如果找到新级别,则会创建一个新对象并将其插入到哈希表中。
结果,您将获得一个具有嵌套对象的数组,该数组包含所有子数组。
结果集的顺序受给定数据顺序的影响。
var data = ['1', '1.1', '2', '2.1', '2.2', '2.3', '2.4', '3', '3.1', '3.2', '3.2.1', '3.2.2', '3.3', '3.4', '3.5', '3.6', '3.7', '3.7.1', '3.7.2'],
result = function (array) {
var result = [],
hash = { _: result };
array.forEach(function (a) {
a.split('.').reduce(function (r, k) {
if (!r[k]) {
r[k] = { _: [] };
r._.push({ id: a, children: r[k]._ });
}
return r[k];
}, hash);
});
return result;
}(data);
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;