javascript - 我想要这个输出使用递归函数
问题描述
如何编写最好的 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 的数组。
解决方案
您可以为此编写一个简单的递归函数。
首先检查当前 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);
推荐阅读
- c# - 如何修复我的 c# 二进制搜索算法?
- visual-studio-2015 - Visual Studio 2017/IIS Express:无法连接到已配置的开发 Web 服务器
- api - 如何验证 Analytics 360 是否与 BigQuery 成功关联?
- regex - 使用 4 个或更少 OR 语句的数字 -25 到 1045 的正则表达式
- regex - 使用 RegEx 匹配带有和不带有转义字符的字符串
- next.js - 下一个 js 零配置中的模块解析失败
- sql - 来自 SQL Server Management Studio 的令人困惑的性能建议
- arduino - 使用带有 DTH11 的 Arduino ATmega328P ADC 读取温度
- django - POST 和 GET 请求的不同序列化程序,这是正确的方法吗?动态嵌套序列化器
- python - 改进代码:在中间件中单击时显示 url 的日期时间