javascript - 如何从嵌套数组中获取单个名称属性?
问题描述
我正在开发 Angular 项目,我需要从给定的嵌套数组对象中获取名称属性。_.map('ArrayName',(o)=>o.name);
我在这里尝试使用 lodash 地图功能,我只收到 [ Peter, Andy ]
结果。我想要这样的所有名称属性[Peter, Andy, Mills, mac, Teddy]
。有人可以指导我如何做到这一点。
[{
"id": "1",
"name": "Peter",
"children": []}
,{
"id": "2",
"name": "Andy",
"children": [
{
"id": "3",
"name": "Mills",
"children": []
},
{
"id": "4",
"name": "Mac",
"children": [
{
"id": "5",
"name": "Teddy",
"children": []
}
]
}
]}]
解决方案
您需要children
递归访问嵌套数组。
这是一个使用Array.prototype.flatMap()
andspread syntax
递归迭代每个子数组并展平结果的示例。
const input = [{ "id": "1", "name": "Peter", "children": [] }, { "id": "2", "name": "Andy", "children": [{ "id": "3", "name": "Mills", "children": [] }, { "id": "4", "name": "Mac", "children": [{ "id": "5", "name": "Teddy", "children": [] }] }] }];
const recursivelyGetProp = (arr, prop) => (
arr.flatMap(({ children, [prop]: p }) =>
[p, ...(children.length ? recursivelyGetProp(children, prop) : [])]
));
console.log(recursivelyGetProp(input, 'name'));
推荐阅读
- php - 用不同的数量更新相同的id(只更新最先出现的id)
- wix - 如何自动测试可通过 UAC 安装的 MSI?
- skype-for-business - 打开 Skype for Business 聊天室的命令行参数
- reactjs - 为什么 onClick 只在第一次工作?
- r - 加速双循环 R
- c# - 为什么 ConcurrentDictionary 的值需要是线程安全的?
- c# - 如何在 C# 中使用 OpenCV(商业用途)
- ios - Apple 要求在 2019 年 3 月之前使用 iOS 12 SDK 构建所有应用程序更新
- .net - 我如何知道哪个版本的 .NET 框架有这个错误修复?
- postgresql - 在 PostgresSQL 中将 `int` 迁移到 `bigint` 没有任何停机时间?