我正在尝试将层次数组转换为扁平数组。
我有这样的对象,它有相同类型的子级,这些子级又有相同类型的子级,以此类推。
[{
id: "123",
children: [
{
id: "603",
children: [
{
id: "684",
children: [
...
]
},
{
id: "456",
children: []
}
]
}
]
}]
我找到了一种将其展平的方法,并且我有嵌套级别的信息。 一层深入(有效):
let result = myArray.flat()
.concat(myArray.flatMap(comm => comm.children));
两层深度(有效):
let result = myArray.flat()
.concat(myArray.flatMap(comm => comm.children))
.concat(myArray.flatMap(comm => comm.children.flatMap(comm2 => comm2.children)));
但是我如何将这段代码泛化为一个函数以处理任意深度的情况呢?我已经尝试过了,但它并没有起作用:
flatFunct = (myArray, deep) => {
let func = comm => comm.children;
let flatMapResult = myArray.flat();
for (let i = 0; i < deep; i++) {
flatMapResult = flatMapResult.concat(() => {
let result = myArray;
for (let j = 0; j < i; j++) {
result = result.flatMap(func);
}
});
}
};
我离成功很近,但我还没有找到正确的方法。
function flatter(arr) { arr.flat().concat(arr.flatMap(comm => comm.children)); flatter(arr); } )}
但是你必须在每次递归时检查是否还有更多的子元素。 - GrafiCode