首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归函数中的javascript推到数组

递归函数中的javascript推到数组
EN

Stack Overflow用户
提问于 2021-07-15 09:35:40
回答 2查看 96关注 0票数 2

我有一个用于文件夹结构的数组,用于迭代每个文件夹内容({ revit: "revit11" })并将其推送到一个新数组(newArray)。但是函数返回为空!

代码语言:javascript
复制
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!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-15 09:45:53

如果是“文件夹”,则忽略test()的返回值。

代码语言:javascript
复制
if (element.folder) {
    test(element.folder);
}

您必须将newArray的当前状态与返回值组合起来:

代码语言:javascript
复制
if (element.folder) {
    newArray = newArray.concat(test(element.folder));
}

代码语言:javascript
复制
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);

票数 4
EN

Stack Overflow用户

发布于 2021-07-15 09:48:49

问题是,您没有重用递归方法中的值。因此,必须将递归方法的结果添加到newArray中,如下所示:

代码语言:javascript
复制
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;
  }

代码语言:javascript
复制
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!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68391365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档