Как удалить элемент из вложенного массива объектов?

На входе такие данные:

const db = {
  id: 1,
  name: "main:",
  children: [
    {
      id: 3,
      name: "node3",
      children: [
        {
          id: 4,
          name: "node1",
          children: [
            {
              id: 5,
              name: "node1",
              children: []
            },
            {
              name: "node1",
              id: 6,
              children: [
                {
                  id: 7,
                  name: "node1",
                  children: []
                },
                {
                  id: 8,
                  name: "node1",
                  children: []
                }
              ]
            }
          ]
        },
        {
          id: 9,
          name: "node1",
          children: []
        }
      ]
    },
    {
      id: 10,
      name: "node1",
      children: []
    },
    {
      id: 11,
      name: "node1",
      children: []
    }
  ]
}

Пробовал такое решение, но ничего не происходит:

function removeNode(arr, id) {
 arr.forEach((it, index) => {
  if (it.id === id) {
   arr.slice(index, 1)
  }
  removeNode(it.children, id)
 })
}

Ответы (1 шт):

Автор решения: Oleg Barabanov

Вместо метода slice() используйте метод splice();

const db = {
  id: 1,
  name: "main:",
  children: [{
      id: 3,
      name: "node3",
      children: [{
          id: 4,
          name: "node1",
          children: [{
              id: 5,
              name: "node1",
              children: []
            },
            {
              name: "node1",
              id: 6,
              children: [{
                  id: 7,
                  name: "node1",
                  children: []
                },
                {
                  id: 8,
                  name: "node1",
                  children: []
                }
              ]
            }
          ]
        },
        {
          id: 9,
          name: "node1",
          children: []
        }
      ]
    },
    {
      id: 10,
      name: "node1",
      children: []
    },
    {
      id: 11,
      name: "node1",
      children: []
    }
  ]
}

function removeNode(arr, id) {
  arr.forEach((it, index) => {
    if (it.id === id) {
      arr.splice(index, 1)
    }
    removeNode(it.children, id)
  })
}

removeNode([db], 4);
console.log(db);
→ Ссылка