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

62 阅读1分钟

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);