我陷入了这种数据结构和算法问题。
以下数组的标签:[Id, Label, ParentId]
var dataSet = [[5, 'a', 2], [2, 'b', 5], [5, 'c', 20], [20, 'x', null], [5, 'd', 2]];
在这里我们可以找到包含null的Parent,这意味着[20,'x',null]数组成为父根。
然后,父ID应与其子节点[20, 'x', null]
数组ID相匹配,并与[5, 'c', 20]
数组父ID相匹配。
以下是我正在寻找父母与子女关系的格式
- Parent Root: [20,'x'] [20,'x',null]
- ChildNode: ->[5, 'c'] [5,'c',20]
- SubChild: ->->[2,'b'] [2,'b',5]
- nextSub: ->->->[5,'a'] [5,'a',2]
- final node: ->->->[5,'d'] [5,'d',2]
那么我们可以使用javascript开发哪种数据结构和哪种算法?
答案 0 :(得分:1)
您可以使用reduceRight
创建递归函数,因为我们将使用splice
,但是您也应该reverse
。
const data = [[5, 'a', 2], [2, 'b', 5], [5, 'c', 20], [20, 'x', null], [5, 'd', 2]];
function f(data, pid = null) {
return data.reverse().reduceRight((r, [id, str, parent], i) => {
if (pid == parent) {
const el = [id, str, parent];
data.splice(i, 1);
const children = f(data, id);
if (children.length) el.push(...children);
r.push(el)
}
return r;
}, []);
}
const result = f(data);
console.log(result);