gpt4 book ai didi

javascript在递归函数中推送到数组

转载 作者:行者123 更新时间:2023-12-02 16:09:34 25 4
gpt4 key购买 nike

我有一个文件夹结构数组,用于遍历每个文件夹内容 ({ 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!

最佳答案

如果是“文件夹”,您将忽略 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);

关于javascript在递归函数中推送到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68391365/

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