gpt4 book ai didi

javascript - 用对象和数组展平深度嵌套的数组

转载 作者:行者123 更新时间:2023-12-05 03:54:28 24 4
gpt4 key购买 nike

我有一个对象数组,其中包含另一个包含对象的数组。嵌套有四层深。数组结构为:

[
{
title: 'Title',
type: 'section',
links: [
{
label: 'Label',
id: 'id_1',
links: [
{
title: 'Title',
type: 'section',
links: [
{
label: 'Label',
id: 'id_2',
links: [
{
label: 'Label',
id: 'id_3',
links: [],
}
]
}
]
},
{
title: 'Other title',
type: 'section',
links: [
{
label: 'Label',
id: 'id_4',
links: [],
}
]
}
]
}
]
}
]

我想要一个展平的数组,其中包含包含链接的链接数组的 ID(它们是子菜单的父级)。所以想要的结果是这样的:["id_1", "id_2"]

我已尝试使用取自 MDN 的函数获得结果:

flatDeep(arr, d = 1) {
return d > 0
? arr.reduce((acc, val) =>
acc.concat(Array.isArray(val.links)
? this.flatDeep(val.links, d - 1)
: val.links), [])
: arr.slice();
}

这给了我一个空数组。

最佳答案

使用Array.flatMap()。解构每个对象并使用空数组作为缺少 id 值的默认值。连接 id 和递归展平链接的结果。

const flattenIds = arr => arr.flatMap(({ id = [], links }) => 
[].concat(id, flattenIds(links))
);

const data = [{ title: 'Title', type: 'section', links: [{ label: 'Label', id: 'id_1', links: [{ title: 'Title', type: 'section', links: [{ label: 'Label', id: 'id_2', links: [{ label: 'Label', id: 'id_3', links: [] }] }] }, { title: 'Other title', type: 'section', links: [{ label: 'Label', id: 'id_4', links: [] }] }] }] }];

const result = flattenIds(data);

console.log(result);

关于javascript - 用对象和数组展平深度嵌套的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60955961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com