我有一个用于文件夹结构的数组,用于迭代每个文件夹内容({ revit: "revit11" })并将其推送到一个新数组(newArray)。但是函数返回为空!
const dummyArray = [
{
folder: [
{ item: "K07" },
{
folder: [
{ item: "K08" },
{
folder: [
{ item: "K09" },
{ incloued: { revit: "revit02" } },
{
folder: [
{ incloued: { revit: "revit11" } },
{ incloued: { revit: "revit12" } },
],
},
],
},
{ incloued: { revit: "revit05" } },
],
},
{ incloued: { revit: "revit06" } },
],
},
{
folder: [
{ item: "aa" },
{ folder: [{ item: "bb" }, { folder: [{ item: "cc" }] }] },
],
incloued: { revit: "revit07" },
},
];
function test(arr) {
let newArray = []; // i need to return this array as function return.
arr.forEach((element) => {
if (element.folder) {
test(element.folder);
} else if (element.incloued) {
console.log(element.incloued);
newArray.push(element.incloued);
}
});
return newArray;
}
const returnFun= test(dummyArray)
console.log(returnFun) //empty!
发布于 2021-07-15 09:45:53
如果是“文件夹”,则忽略test()的返回值。
if (element.folder) {
test(element.folder);
}您必须将newArray的当前状态与返回值组合起来:
if (element.folder) {
newArray = newArray.concat(test(element.folder));
}
const dummyArray = [
{
folder: [
{ item: "K07" },
{
folder: [
{ item: "K08" },
{
folder: [
{ item: "K09" },
{ incloued: { revit: "revit02" } },
{
folder: [
{ incloued: { revit: "revit11" } },
{ incloued: { revit: "revit12" } },
],
},
],
},
{ incloued: { revit: "revit05" } },
],
},
{ incloued: { revit: "revit06" } },
],
},
{
folder: [
{ item: "aa" },
{ folder: [{ item: "bb" }, { folder: [{ item: "cc" }] }] },
],
incloued: { revit: "revit07" },
},
];
function test(arr) {
let newArray = [];
arr.forEach((element) => {
if (element.folder) {
newArray = newArray.concat(test(element.folder)); // store the result of "inner folders"
} else if (element.incloued) {
console.log(element.incloued);
newArray.push(element.incloued);
}
});
return newArray;
}
const returnFun = test(dummyArray);
console.log(returnFun);
发布于 2021-07-15 09:48:49
问题是,您没有重用递归方法中的值。因此,必须将递归方法的结果添加到newArray中,如下所示:
function test(arr) {
let newArray = []; // i need to return this array as function return.
arr.forEach((element) => {
if (element.folder) {
newArray.push(...test(element.folder));
} else if (element.incloued) {
newArray.push(element.incloued);
}
});
return newArray;
}
const dummyArray = [
{
folder: [
{ item: "K07" },
{
folder: [
{ item: "K08" },
{
folder: [
{ item: "K09" },
{ incloued: { revit: "revit02" } },
{
folder: [
{ incloued: { revit: "revit11" } },
{ incloued: { revit: "revit12" } },
],
},
],
},
{ incloued: { revit: "revit05" } },
],
},
{ incloued: { revit: "revit06" } },
],
},
{
folder: [
{ item: "aa" },
{ folder: [{ item: "bb" }, { folder: [{ item: "cc" }] }] },
],
incloued: { revit: "revit07" },
},
];
function test(arr) {
let newArray = []; // i need to return this array as function return.
arr.forEach((element) => {
if (element.folder) {
newArray.push(...test(element.folder));
} else if (element.incloued) {
newArray.push(element.incloued);
}
});
return newArray;
}
const returnFun= test(dummyArray)
console.log(returnFun) //empty!
https://stackoverflow.com/questions/68391365
复制相似问题