Reputation: 50732
I have the below JSON
;
"level1":[
{
"id":"0",
"index":"0",
"label":"Level 1 Label a",
"level2":[
{
"id":"0",
"index":"0",
"label":"Level 2 Label 1a",
"level3":[
{"id":"UniqueId1","index":"0","label":"Level 3 Label 00a"}
]
},
{
"id":"1",
"index":"1",
"label":"Level 2 Label 1b",
"level3":[
{"id":"UniqueId2","index":"0","label":"Level 3 Label 00b"}
]
}]
},
{
"id":"1",
"index":"1",
"label":"Level 1 Label b",
"level2":[
{
"id":"0",
"index":"0",
"label":"Level 2 Label 2a",
"level3":[
{"id":"UniqueId3","index":"0","label":"Level 3 Label a"}
]
},
{
"id":"1",
"index":"1",
"label":"Level 22 Label",
"level3":[
{"id":"UniqueId4","index":"0","label":"Level 3 Label b"}
]
}]
}
]
My question is if there is a way to create an array of all strings from this of level3.id So given this input, I want the output to be
["UniqueId1", "UniqueId2", "UniqueId3", "UniqueId4"]
I am thinking of using map
...but not sure if there is a better way.
Upvotes: 1
Views: 54
Reputation: 9893
The simplest way is using flatMap
like this:
level1 = [
{
"id": "0",
"index": "0",
"label": "Level 1 Label a",
"level2": [
{
"id": "0",
"index": "0",
"label": "Level 2 Label 1a",
"level3": [
{ "id": "UniqueId1", "index": "0", "label": "Level 3 Label 00a" }
]
},
{
"id": "1",
"index": "1",
"label": "Level 2 Label 1b",
"level3": [
{ "id": "UniqueId2", "index": "0", "label": "Level 3 Label 00b" }
]
}]
},
{
"id": "1",
"index": "1",
"label": "Level 1 Label b",
"level2": [
{
"id": "0",
"index": "0",
"label": "Level 2 Label 2a",
"level3": [
{ "id": "UniqueId3", "index": "0", "label": "Level 3 Label a" }
]
},
{
"id": "1",
"index": "1",
"label": "Level 22 Label",
"level3": [
{ "id": "UniqueId4", "index": "0", "label": "Level 3 Label b" }
]
}]
}
]
console.log( level1.flatMap(t=>t.level2).flatMap(t=>t.level3).map(x=>x.id))
Upvotes: 2