Удаление дочерних элементов древовидного объекта JS
Необходимо удалить все дочерние элементы (children) у каждого объекта, который имеет в selectedValue значение select: 'Нет'. Дан такой объект:
const data = [
{
key: '1.001',
data: {
id: '1.001',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: [
{
key: '1.002',
data: {
id: '1.002',
name: 'Это имя нужно получить',
selectedValue: [{ select: 'Нет' }],
},
children: null,
},
{
key: '1.003',
data: {
id: '1.003',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
{
key: '1.004',
data: {
id: '1.004',
name: 'qwe',
selectedValue: [{ select: 'Нет' }],
},
children: [
{
key: '1.005',
data: {
id: '1.005',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
{
key: '1.006',
data: {
id: '1.006',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
]
}
]
},
{
key: '2.001',
data: {
id: '2.001',
name: 'qwe',
selectedValue: [{ select: 'Нет' }],
},
children: [
{
key: '2.002',
data: {
id: '2.002',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
{
key: '2.003',
data: {
id: '2.003',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
]
}
]
Ожидаемый результат:
const data = [
{
key: '1.001',
data: {
id: '1.001',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: [
{
key: '1.002',
data: {
id: '1.002',
name: 'Это имя нужно получить',
selectedValue: [{ select: 'Нет' }],
},
children: null,
},
{
key: '1.003',
data: {
id: '1.003',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
{
key: '1.004',
data: {
id: '1.004',
name: 'qwe',
selectedValue: [{ select: 'Нет' }],
},
children: null,
}
]
},
{
key: '2.001',
data: {
id: '2.001',
name: 'qwe',
selectedValue: [{ select: 'Нет' }],
},
children: null,
}
]
Уровень вложенности объектов неограничен.
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
const data = [
{
key: '1.001',
data: {
id: '1.001',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: [
{
key: '1.002',
data: {
id: '1.002',
name: 'Это имя нужно получить',
selectedValue: [{ select: 'Нет' }],
},
children: null,
},
{
key: '1.003',
data: {
id: '1.003',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
{
key: '1.004',
data: {
id: '1.004',
name: 'qwe',
selectedValue: [{ select: 'Нет' }],
},
children: [
{
key: '1.005',
data: {
id: '1.005',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
{
key: '1.006',
data: {
id: '1.006',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
]
}
]
},
{
key: '2.001',
data: {
id: '2.001',
name: 'qwe',
selectedValue: [{ select: 'Нет' }],
},
children: [
{
key: '2.002',
data: {
id: '2.002',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
{
key: '2.003',
data: {
id: '2.003',
name: 'qwe',
selectedValue: [{ select: 'Да' }],
},
children: null,
},
]
}
];
function deleteNotSelectedChildren(parentArray) {
for (const child of parentArray) {
if (child.data.selectedValue.some(item => item.select === 'Нет')) {
child.children = null;
} else if (child.children !== null) {
deleteNotSelectedChildren(child.children);
}
};
}
deleteNotSelectedChildren(data);
console.log(JSON.stringify(data, null, ' '));