Я долго ломал голову над этим и подумал, может быть, пришло время опубликовать здесь.
У меня сложная структура объектов, которая может иметь вложенный элемент любого уровня.Вот пример:
{
resourceType: 'QuestionnaireResponse',
item: [
{
linkId: 'Floors',
answer: []
},
{
linkId: 'KID',
answer: [
{
valueBoolean: false
}
]
},
{
linkId: 'Age',
answer: [
{
valueString: '≥30 Years'
}
]
},
{
linkId: 'UnicornGroup',
item: [
{
linkId: 'DoYouLikeUnicorns',
answer: [{valueBoolean: true}]
},
{
linkId: 'DoYouLikeFHIR'
}
],
answer: []
}
]
}
Я хочу получить объект, который выглядит следующим образом:
{
resourceType: 'QuestionnaireResponse',
item: [
{
linkId: 'KID',
answer: [
{
valueBoolean: false
}
]
},
{
linkId: 'Age',
answer: [
{
valueString: '≥30 Years'
}
]
},
{
linkId: 'UnicornGroup',
item: [
{
linkId: 'DoYouLikeUnicorns',
answer: [{valueBoolean: true}]
}
]
}
]
}
То есть я хочу отфильтровать объекты с пустым ответоммассив и не имеет вложенного объекта с непустым массивом ответов.
Это то, что у меня есть, но оно не работает:
var res = fItems.filter(function f(o) {
if (o.answer && o.answer.length > 0) {
return true
} else {
if(o.item){
return f(o.item);
}
}
});
Я создал REPL Здесь .Мы используем ramda в нашем проекте, так что если решение использует ramda, то это тоже хорошо.Спасибо за время.