reduce遍历了一个数组,返回的结果不正确

发布于 2022-09-13 00:55:28 字数 1611 浏览 21 评论 0

想返回的结果:

{
    4:[1,2,4],
    5:[1,2,5],
    6:[1,3,6],
    7:[1,3,7],
}

但现在返回的结果是:

{
    6:[1,3,6],
    7:[1,3,7],
}

想问一下这是问题出在哪里呢?
代码如下:

let data = [
    {
        label: '1231',
        value: 1,
        children: [
            {
                label: 'qwe2',
                value: 2,
                children: [
                    {
                        label: 'qwe4',
                        value: 4,
                        children: []
                    },
                    {
                        label: 'asd5',
                        value: 5,
                        children: []
                    }
                ]
            },
            {
                label: 'asd3',
                value: 3,
                children: [
                    {
                        label: 'qwe6',
                        value: 6,
                        children: []
                    },
                    {
                        label: 'asd7',
                        value: 7,
                        children: []
                    }
                ]
            }
        ]
    }
]
function ab(data,resultArray){
    return data.reduce((pre,cur)=>{
        let tempArray = [...resultArray];
        let temp = {...cur};
        delete temp.children;
        tempArray.push(temp)
        return cur.children && cur.children.length > 0
        ? ab(cur.children,tempArray)
        : {...pre,[cur.value]:tempArray}
    },{})
}
console.log(ab(data,[]))

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

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

发布评论

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

评论(2

悍妇囚夫 2022-09-20 00:55:28
function ab(data, resultArray) {
    return data.reduce((pre, cur) => {
        let tempArray = [...resultArray];
        let temp = { ...cur };
        // delete temp.children
        tempArray.push(temp.value);
        return cur.children && cur.children.length > 0
            ? { ...pre, ...ab(cur.children, tempArray) }
            : { ...pre, [cur.value]: tempArray }
    }, {})
}

这样就行了,主要是children子项遍历时前一项整合的值没有存下来

云胡 2022-09-20 00:55:28

写了一个 forEach 的程序

let data = [
    {
        label: '1231',
        value: 1,
        children: [
            {
                label: 'qwe2',
                value: 2,
                children: [
                    {
                        label: 'qwe4',
                        value: 4,
                        children: []
                    },
                    {
                        label: 'asd5',
                        value: 5,
                        children: []
                    }
                ]
            },
            {
                label: 'asd3',
                value: 3,
                children: [
                    {
                        label: 'qwe6',
                        value: 6,
                        children: []
                    },
                    {
                        label: 'asd7',
                        value: 7,
                        children: []
                    }
                ]
            }
        ]
    }
];
// 获取子节点的value路径
var getlastNodePath = (data,arr=[],res={})=>(data.forEach(item=>(arr.push(item.value),item.children.length > 0 ? (this.getlastNodePath(item.children, arr, res),arr.pop()) : ((res[item.value]=[...arr]),arr.pop()))),res);
getlastNodePath(data);

结果

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