javascript - 如何使用 lodash 从子项中查找父名并打印路径
问题描述
我有一个像下面这样的集合
const tree = [
{
id: 1,
class_name: 'Home',
parent_id: 0,
},
{
id: 2,
class_name: 'Folder1',
parent_id: 1,
},
{
id: 3,
class_name: 'Folder2',
parent_id: 1,
},
{
id: 4,
class_name: 'SubFolder1',
parent_id: 2
},
{
id: 5,
class_name: 'EndFolder1',
parent_id: 4
}
]
在这个集合中,我知道子类名称为 SubFolder1,id 为 4,parent_id 为 2,我需要从这个父 id 遍历到根节点以找到下面的路径。父 id 充当每个对象的 id。
SubFolder1
Folder1/SubFolder1
Home/Folder1/SubFolder1
我已经尝试使用 lodash find 停止在一个级别中,当 parent_id 为 0 时,我需要遍历它的根。并添加路径。
if (temp.parent_id !== '0') {
temp = find(tree, {id: temp.parent_id});
} else {
tempClassName = `${temp.class_name}`;
}
解决方案
您可以将具有所有节点的对象id
作为键并获取所有父对象,直到没有id
可用为止。
const
getParents = (array, id) => {
const
nodes = array.reduce((r, o) => (r[o.id] = o, r), {}),
getP = id => id in nodes
? [...getP(nodes[id].parent_id), nodes[id].class_name]
: [];
return getP(id).join('/');
},
array = [{ id: 1, class_name: 'Home', parent_id: 0 }, { id: 2, class_name: 'Folder1', parent_id: 1 }, { id: 3, class_name: 'Folder2', parent_id: 1 }, { id: 4, class_name: 'SubFolder1', parent_id: 2 }, { id: 5, class_name: 'EndFolder1', parent_id: 4 }];
console.log(getParents(array, 4));
推荐阅读
- c# - 正则表达式应该只匹配两种类型的带引号的字符串之一
- node.js - Node.Js 从 POST 请求中获取数据
- session - Firefox 68.0 更新导致 API 调用在 CSP 报告 uri POST 请求后返回 403
- java - 如何在 500 返回码导致异常后从 URL.openStream() 读取 HTML?
- excel - 更改后单元格不会变绿
- swift - swift UICollectionView 类似预览和拖动项
- azure-devops - 从父项继承字段值的子工作类型
- apache-spark - 如何从 apache spark 的外部文本文件中读取 structType 模式?
- c++ - Ray-AABB 交集函数的类隶属关系
- ios - 将 CMSampleBuffer 转换为 AVAudioPCMBuffer 以获取实时音频频率