json data
const json = [{
link: "animal",
type: [{
link: "animal/dog"
},
{
link: "animal/cat",
type: [{
link: "animal/cat/savannah"
},
{
link: "animal/cat/bombay"
}
]
}
]
},
{
link: "car",
type: [{
link: "car/dodge"
},
{
link: "car/mazda",
type: [{
link: "car/mazda/mx5"
}]
}
]
}
];
CodePudding user response:
We can use Array.forEach() combined with recursively function to do it
let convertData = (data) => {
let result = []
data.forEach(d => {
result.push(d.link)
if(d.type){
result.push(...convertData(d.type))
}
})
return result
}
console.log(convertData(json))
const json = [{
link: "animal",
type: [{
link: "animal/dog"
},
{
link: "animal/cat",
type: [{
link: "animal/cat/savannah"
},
{
link: "animal/cat/bombay"
}
]
}
]
},
{
link: "car",
type: [{
link: "car/dodge"
},
{
link: "car/mazda",
type: [{
link: "car/mazda/mx5"
}]
}
]
}
]
let convertData = (data) => {
let result = []
data.forEach(d => {
result.push(d.link)
if(d.type){
result.push(...convertData(d.type))
}
})
return result
}
console.log(convertData(json))
CodePudding user response:
You can solve this by using recursion.
const getLinks = (json, arr = []) => {
json.forEach(item => {
arr.push(item.link);
if(item.type){
getLinks(item.type, arr);
}
});
return arr;
}
console.log(getLinks(json));
Explanation: getLinks takes two parameters, json and arr. arr is an array that is initialized to an empty array.
Then using forEach loops through the json array and pushes the value of the link property into the arr array.
If the item has a type property, the function getLinks is called again with the item.type as the first parameter and the arr array as the second parameter.
