
如上面所示,我有(层次结构)数据。
我需要
我必须使用哪种数据结构来解决这个问题?
显示此数据(UI):对于UI,我的计划是有一个按钮列表,当用户单击按钮时,它将转到下一个级别。例如,最初显示两个按钮'John‘和'Bobbys汽车’。当用户单击“John”时,它会清除屏幕并显示“John”中的内容,即“汉斯汽车零部件”和“xyz云解决方案”等两个按钮。
搜索名称字段:应该可以从所有级别搜索名称字段。例如,用户搜索汽车,它应该显示"Bobbys汽车“和"Hans汽车零部件”。
我现在有一个json数据,然后对其进行解析,并遍历对象以获得用户想要的内容(搜索不包括在内)。我认为使用现有的数据结构(如果有的话)来完成这项任务是明智的。
如果你需要我提供更多的信息,请告诉我。
发布于 2018-08-18 13:30:51
基本上,你有三个有意义的选择:
1)一棵树:
要将数据显示为树,底层数据结构也是一棵树是有意义的,例如:
const root = {
name: "Har's holdings",
code: "0001",
children: [
{
name: "John software company",
code: "0220",
children: [/*...*/],
},
/*...*/
],
};因此,当显示基于node.children的按钮时,如果单击其中一个按钮,则将节点设置为该node = node.children[clicked]。现在,对于搜索来说,将树夷为平地是有意义的,这可以很容易地用生成器完成:
function* flatten(node) {
yield node;
for(const child of node.children)
yield* flatten(child);
}它允许您以下列方式获得一个数组:
const nodes = [.. flatten(root)];现在可以很容易地搜索该数组。
2)查表:
您可以根据节点的代码存储节点,并在每个节点中存储子节点代码,这样您就可以轻松地获得它们:
const byCode = {
"0001": {
name: "Har's holdings",
code: "0001",
children: ["0220", /*...*/],
},
"0220": {
name: "John software company",
code: "0220",
children: [/*...*/]
}
//...
};获取一个节点的所有子节点可以这样做:
const childNodes = byCode["0001"].children.map(key => byCode[key]);要获取所有节点的数组,请执行以下操作:
const nodes = Object.values(byCode);3)数组
const nodes = [
{
name: "Har's holdings",
code: "0001",
children: ["0220", /*...*/],
},
{
name: "John software company",
code: "0220",
children: [/*...*/]
}
];但是,要将其用作树,则必须将其转换为2):
const byCode = {};
for(const node of nodes)
byCode[node.code] = node;您所选择的格式应该取决于存储方式,然后您可以根据用户端的使用情况轻松地在客户端上的一种格式之间进行转换。
https://stackoverflow.com/questions/51909079
复制相似问题