寻找树形结构路径; 根据信息查询树形结构位置;根据ID查询INDEX;
我决定,以后每发一个博文都写一个 故事。
虽然是枯燥的代码,但是也得有故事,对不对, 毕竟代码是需要调试完成的。
一开始我以为写个递归就完事了,loop => arr.for i push 这样就完事了,发现i不是我要的。
然后,找这个规律找好久,就是怎么判断数据是想要的呢。
首先在arr循环的时候会记录所有的值,所以我们在这里做文章。
先研究下这个
手画了一个图
这里的i就是每一次经过的循序。
但是这里有垃圾数据,
为了让结果跟准确,我再画个比较复杂的图。
在正确的id前面添加数据,避免以为是耦合。
然后再分析下, 每一次循环的时候,把前面的删掉。
看图
但是有的坏死的分支怎么办?
在每一次循环体的外面删掉前面的就好了
完成代码如下,带上了例子。
var arr = [
{},
{},
{
c: [
{},
{},
{},
{
c: [
{},
{id: 2},
]
}
]
},
{},
{},
]
function _makePath(tree, children, key, target) {
var done = false, path = [];
function traverse(tree, target) {
for (let i = 0; i < tree.length; i++) {
const node = tree[i];
if (!done) {
if (i > 0) {
path.pop()
}
path.push(i)
if (node[key] === target) {
done = true
return
} else {
let c = node[children];
if (c) {
traverse(c, target);
}
}
}
}
if (!done) {
path.pop();
}
return;
}
traverse(tree, target);
return path;
}
_makePath(arr, 'c' , 'id', 2)
--完成--
如果想要根据path修改值,那么可以写for循环,根据path找到值然后修改。
--END--
网友评论