JS中数组和树型数据的相互转化

21 篇文章 0 订阅
20 篇文章 0 订阅

这里写自定义目录标题

概要

在前后端分离的开发工作中,我们经常从后端的WebAPI中获取到1维数据,前端需要将这些数据转换为树型结构。例如多级菜单数据,我们需要通过id和pid等栏位,将1维数组数据转换成一个树型结构,然后再进行页面渲染。

本文主要介绍两个JS方法,方便我们将数组转换成树,或将树形结构转换成1维数组。

代码及实现

测试数据:

const data = [
    {
        id:1,
        text:"A",
        pid:0
    },
    {
        id:2,
        text:"B",
        pid:0
    },
    {
        id:3,
        text:"C",
        pid:1
    },
    {
        id:4,
        text:"D",
        pid:2
    },
    {
        id:5,
        text:"E",
        pid:2
    },
    {
        id:6,
        text:"F",
        pid:1
    },
    {
        id:7,
        text:"F",
        pid:4
    },
    {
        id:8,
        text:"G",
        pid:3
    },
    {
        id:9,
        text:"H",
        pid:1
    },
];

id是当前节点的标识,pid是当前节点的父节点标识。

数组到树

function convertFromArrayToTree(data) {
    return data.filter(d => {
        const _children = data.filter(c => c.pid == d.id);
        _children.length && (d.children = _children);
        return d.pid == 0;
    });
}

遍历每个数组元素,为每个元素获所有子节点,返回所有根节点。如果当前节点包含子节点,则增加children栏位。

树到数组

function getAllChildren(el) {
    const nodes = [];
    el.children && (el.children.map(c =>
        nodes.push(c, ...getAllChildren(c))
    ));
    return nodes;
}

function convertFromTreeToArray(tree) {
    const parents = tree.filter(n => n.pid == 0);
    const nodes = [];
    parents.forEach(el => {
        nodes.push(el, ...getAllChildren(el))
    });
    return nodes;
}
  1. getAllChildren方法用户获取当前节点的所有子节点并返回;
  2. convertFromTreeToArray函数遍历所有根节点,获取每个根节点的所有子节点。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值