首页 > 解决方案 > 我想要这个输出使用递归函数

问题描述

如何编写最好的 javascript 函数来获取此输出。 ['1','p1','p11','2','p2','p21']对于这个输入。

const arr = [{

        "children": [{
            "property1": "1",

            "children": [{
                "property1": "p1",

                "children": [{
                    "property1": "p11",

                    "children": [

                    ]
                }]
            }]
        }]
    },
    {

        "children": [{
            "property1": "2",

            "children": [{
                "property1": "p2",

                "children": [{
                    "property1": "p21",

                    "children": [

                    ]
                }]
            }]
        }]
    }
]

如何使用递归函数获取输出。这是孩子们的循环。如果子项长度为 0,则不要添加,否则添加 property1 的数组。

标签: javascriptecmascript-6

解决方案


您可以为此编写一个简单的递归函数。

  • 首先检查当前 Array 元素或子元素是否包含property1。如果它存在,只需推property1送到结果数组。

  • 然后,您需要检查孩子是否有自己的孩子(或子孩子),如果它有自己的孩子,而不是递归调用将getProperty()孩子数组作为新参数传递给函数的方法以及结果数组。

const arr = [{ "children": [{ "property1": "1", "children": [{ "property1": "p1", "children": [{ "property1": "p11", "children": [ ] }] }] }] }, { "children": [{ "property1": "2", "children": [{ "property1": "p2", "children": [{ "property1": "p21", "children": [ ] }] }] }] } ];

function getProperty(arr, result){
  for(var i = 0; i < arr.length; i++){
    if(arr[i].property1)
      result.push(arr[i].property1);
    if(arr[i].children && arr[i].children.length)
      getProperty(arr[i].children, result);
  }
}
let result = [];
getProperty(arr,result)
console.log(result);


推荐阅读