Удаление дочерних элементов древовидного объекта 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, '  '));

→ Ссылка