首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JavaScript/TypeScript表示同一类型对象的未知深度树的最佳方法?

问用JavaScript/TypeScript表示同一类型对象的未知深度树的最佳方法?
EN

Stack Overflow用户
提问于 2021-12-07 13:24:43
回答 1查看 107关注 0票数 3

这里最明显的答案是,有一个类表示对象,如果有父对象,则引用父对象。跨树的查询将从树的给定节点开始,并返回该节点的所有父对象。每个节点将只有一个直接父节点。

是否有更好的方法在计算上或从软件设计的角度来做到这一点?

编辑:寻找计算复杂性改进建议或可维护性建议。记忆在这里不是什么大问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-07 15:28:06

@Thomas是关系型的。不确定我们的团队对存储过程的看法是什么,但是如果有足够的理由使用它们,我确信我可以证明这一点。

在关系数据库中,我将使用公共表表达式

代码语言:javascript
复制
WITH foo AS   
(  
    -- your start node
    SELECT * 
    FROM MyData AS d
    WHERE d.id = 123

    UNION ALL  

    -- traversing up
    SELECT parent.*
    FROM MyData AS parent
    JOIN foo AS child
      ON parent.id = child.parentId
)
-- selecting the data you want to return from the CTE
SELECT * FROM foo;

用JS术语,这里描述了上面的查询所做的工作:

代码语言:javascript
复制
// initial SELECT
var foo = myData.filter(item => item.id === 123);

// UNION ALL + SELECT with JOIN onto `foo`
for (let i = 0; i < foo.length; ++i) {
  foo.push(...myData.filter(item => item.id === foo[i].parentId));
}

console.log(foo);

只有DB select比JS代码中的Array#filter()要快得多,性能也更好,但基本上它们产生的结果是相同的;(0或更多的)列表匹配

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70260944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档