Позвольте мне сначала показать вам код, а затем я объясню свои потребности. Я хочу показать вам структуру входного массива и желаемый результат:
[
{
link: "someurl",
name: "Foo",
subCats: [
{
link: "anotherurl",
name: "Bar",
subCats: [
{
link: "anotherurl",
subCats: [
{
link: "onemorekink"
name: "Prod",
}
]
}
]
},
{
link: "someurll",
name: "Fuzzy",
subCats: [
{
link: "besturiever",
name: "SomeName",
subCats: [
{
link: "onemore",
name: "Aloc",
subCats: [
{
link: "anotherlink"
name: "Final",
}
]
}
]
}
]
}
]
}
]
И что мне нужно получить в результате:
{
link: "onemorekink"
name: "Prod",
},
{
link: "anotherlink"
name: "Final",
}
Я надеюсь, вы поняли идею. По сути, мне нужно как-то получить последний элемент subCats
, который не включает дочерние subCats
и добавить его в результирующий массив. Я попытался использовать Lodash, потому что он идеально подходит для операций с массивами/объектами. Спасибо за помощь заранее.
Попробуй это
let b=[]; // result here
let f = x => x.map( y=> y.subCats ? f(y.subCats) : b.push(y) );
f(a);
let a = [
{
link: "someurl",
name: "Foo",
subCats: [
{
link: "anotherurl",
name: "Bar",
subCats: [
{
link: "anotherurl",
subCats: [
{
link: "onemorekink",
name: "Prod",
}
]
}
]
},
{
link: "someurll",
name: "Fuzzy",
subCats: [
{
link: "besturiever",
name: "SomeName",
subCats: [
{
link: "onemore",
name: "Aloc",
subCats: [
{
link: "anotherlink",
name: "Final",
}
]
}
]
}
]
}
]
}
];
let b=[];
let f = x => x.map( y=> y.subCats ? f(y.subCats) : b.push(y) );
f(a);
console.log(b);
довольно прямо, без лишнего рекурсивная функция..
function process(data){
for(let a of data){
if(a.subCats){
process(a.subCats);
}else{
console.log(a)
}
}
}
Довольно просто написать метод, который сделает это за вас без необходимости в lodash
function findLastLeafs(items, key) {
let results = [];
items.forEach((item, index) => {
if (item[key] && item[key].length) {
results = results.concat(findLastLeafs(item[key], key));
} else if (index === items.length - 1) {
results.push(item);
}
})
return results;
}
const result = findLastLeafs(data, 'subCats');
onemorekink
(но ваш вывод содержит)