js树形转换、扁平化、去重

1、树形转换

const list = [{
                "id": 19,
                "parentId": 0,
            },
            {
                "id": 18,
                "parentId": 16,
            },
            {
                "id": 17,
                "parentId": 16,
            },
            {
                "id": 16,
                "parentId": 0,
            }
        ];

转换成树形结构

方法1、

在进行遍历的时候通过对象的key属性进行判断

const listTree = (tree,parentid,children,startid)=>{
    const treeObj = {}
    tree.map((item)=>{
        treeObj[item.id] = item;
    })
    //对象的key是tree的id,下面遍历使用这个属性进行判断
    
    const result = []
    tree.map((item)=>{
        const pid = tree[item.parentid]
        //这里就是根据上面进行判断,判断对象中这个key是否存在,是否有对应的parentid
        if(pid){
            pid.children = pid.children || []
            pid.children.push(item)
        }else{
             result.push(item)
        }
    })
    return result
}

方法2、

通过filter方法实现

const convert=(tree,parentid,current,startid)=>{

    //找出不符合的数组
    const newList = tree.filter((item)=>item.parent != startid)

    //拷贝一下、尽量不在源数组操作
    const deeplist = JSON.parse(JSON.stringify(tree))
    
    deeplist.filter((item)=>{
        if(item.parentid == startid){
            item.children = conver(newList,parentid,current,item.id)
            return true
        }     
        return false
    })

}

const result = convert(list, 'parentId', 'current', 0);

console.log('result', result);

2、扁平化

数组的扁平化其实就是将一个嵌套多层的数组转换为只有一层的数组

例子:

var arrList = [1, 2, [3, 4]]
var arrList2 = [1, 2, [3, 4, 5, 6, [7, [8]]]]
// flat方法参数默认为1,展开一层数组,如果是多层数组,参数传Infinity即可
const flatArr = (arr) => {
        return arr.flat(Infinity)
}

console.log(flatArr(arrList));
console.log(flatArr(arrList2));

3、reduce去重

主要场景是数组中有对象中某一项重复需去重的情况

let parents = [{
        id: 0,
        parent: 'tom'
    },
    {
        id: 1,
        parent: "xiaoming"
    },
    {
        id: 2,
        parent: "xiaohuang"
    },
    {
        id: 3,
        parent: "xiaohua"
    },
    {
        id: 1,
        parent: "xiaolan"
    },
    {
        id: 2,
        parent: "kenan"
    }    
    ]    

let Obj = {}
parents = parents.reduce((cur, next) => {
    Obj[next.id] ? "" : Obj[next.id] = true && cur.push(next)
    //这里进行数据判断并处理数据
    return cur
    }, []) //设置cur默认类型为数组,并且初始值为空

console.log(parents);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
扁平化数据指的是将具有层级关系的数据展开成一维结构,而树形结构则是将具有层级关系的数据呈现为树状图。因此,将扁平化数据转换树形结构需要进行一些处理。 以下是一个示例数据: ```json [ { "id": 1, "name": "节点1", "parentId": null }, { "id": 2, "name": "节点2", "parentId": 1 }, { "id": 3, "name": "节点3", "parentId": 2 }, { "id": 4, "name": "节点4", "parentId": 2 }, { "id": 5, "name": "节点5", "parentId": 1 }, { "id": 6, "name": "节点6", "parentId": 5 } ] ``` 其中,每个对象表示一个节点,`id`表示节点的唯一标识,`name`表示节点的名称,`parentId`表示节点的父节点标识。其中,根节点的`parentId`为`null`。 现在要将这个扁平化数据转换树形结构,可以按照以下步骤进行: 1. 创建一个空的树形结构对象 2. 遍历扁平化数据,将每个节点加入树形结构中 3. 对于每个节点,如果它是根节点,则直接加入树形结构对象的`children`属性中,否则需要将它加入它的父节点的`children`属性中 以下是使用JavaScript实现的代码: ```javascript function flatToTree(flatData) { const tree = {}; const map = {}; for (const node of flatData) { const id = node.id; const parentId = node.parentId; if (!map[id]) { map[id] = { children: [] }; } map[id].id = id; map[id].name = node.name; if (parentId === null) { tree[id] = map[id]; } else { if (!map[parentId]) { map[parentId] = { children: [] }; } map[parentId].children.push(map[id]); } } return Object.values(tree); } ``` 使用该函数对示例数据进行转换,可以得到如下结果: ```json [ { "id": 1, "name": "节点1", "children": [ { "id": 2, "name": "节点2", "children": [ { "id": 3, "name": "节点3", "children": [] }, { "id": 4, "name": "节点4", "children": [] } ] }, { "id": 5, "name": "节点5", "children": [ { "id": 6, "name": "节点6", "children": [] } ] } ] } ] ``` 可以看到,该函数将扁平化数据成功转换成了树形结构。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值