请问大佬们,有没有方法过滤掉没有level=4的数据啊

发布于 2022-09-30 23:08:37 字数 235 浏览 19 评论 0

这是我在rap2上建的树形结构,最多有4级,现在我们公司的需求是过滤掉没有4级(level=4)的数据,意思就是每一层的chilren数组长度不为空,并且最后一层的children里level=4。js算法确实写不来了,求助,谢谢!
http://rap2api.taobao.org/app...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沫雨熙 2022-10-07 23:08:37
function treeFilter (tree, func) {
  // 使用map复制一下节点,避免修改到原树
  return tree.map(node => ({ ...node })).filter(node => {
    node.children = node.children && treeFilter(node.children, func)
    return func(node) || (node.children && node.children.length)
  })
}

调用:

const result = treeFilter(treeList, node => node.level === 4);
荒芜了季节 2022-10-07 23:08:37

你给的数组中,子节点名称有 childrenchilren,后者应该是拼写错误,不修正处理起来麻烦。下面的代码是按修正过后的数据来处理的。

/**
 * 过滤树节点
 * @param {any|any[]} root
 * @param {(node: any) => bool} predicate 返回 true 的节点会被保留
 */
function filterTree(root, predicate) {
    let rootIsArray = false;
    if (Array.isArray(root)) {
        rootIsArray = true;
        root = { children: root };
    }

    root.children = filter(root.children);

    /**
     *
     * @param {any[]} nodes
     * @returns
     */
    function filter(nodes) {
        if (!nodes?.length) { return nodes; }
        return nodes.filter(it => {
            if (!predicate(it)) {
                return false;
            }

            it.children = filter(it.children);
            return true;
        });
    }

    return rootIsArray ? root.children : root;
}

const result = filterTree(data.treeList, it => it.level < 4);
console.log(JSON.stringify(result, null, 2));

写了篇博文:过滤/筛选树节点 - SegmentFault 思否

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文