【JavaScript 】根据数组相同Key合并对应values && 删除tree无用数据

1Q:题目


    let arr = [{
      name: 'a',
      values: [1, 2]
    }, {
      name: 'b',
      values: [3]
    }, {
      name: 'a',
      values: [4, 5]
    }]

    // 转换成如下
    const arr111 = [
      {name: 'a', values: [1, 2, 4, 5]},
      {name: 'b', values: [3]}
    ]

1A:解答

function merge(arr) {
    let newMap = new Map();
    arr.forEach(item => {
        if (newMap[item.name]) {
            newMap[item.name].push(...item.values)
        } else {
            newMap[item.name] = item.values
        }
    });
    let newArr = [];
    for (let key in newMap) {
        let obj = {
            name: key,
            values: newMap[key]
        };
        newArr.push(obj);
    }
    return newArr
}
console.log(merge(arr));

2Q:删除tree无用数据

let tree = [{
    id: 1,
    name: '小明',
    children: [{
        id: 11,
        name: '李好',
        children: [{
            id: 111,
            name: ''
        }],
    }, {
        id: 12,
        name: '',
    }, {
        id: 13,
        name: '张就',
        children: [{
            id: 131,
            name: '王小王'
        }],
    }],
}, {
    id: 2,
    name: '小红',
    children: [],
}];

2A:解答

function filterTree(tree) {
    tree.forEach((item, index) => {
        if (item.name === '' && !item.children) {
            delete tree[index]
        }
        if (item.children) {
            return filterTree(item.children)
        }
    })
}
filterTree(tree);
console.log(tree);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不停喝水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值