luemerg
@luemerg

Как перенести дочерний объект?

Имеется массив объектов:
const boxes = [
{
    id: 1,
    inner: [
        {
            id: 2,
            inner: [
                {
                    id: 3,
                    inner: []
                },
                {
                    id: 4,
                    inner: []
                }
            ]
        }, 
        {
            id: 5,
            inner: []
        }
    ]
}]


Необходимо написать алгоритм который будет брать объект box_id и будет перемещать его в to_id.

Пусть функция будет putBox, тогда после выполнения putBox(3, 1) получится:
const boxes = [
{
    id: 1,
    inner: [
        {
            id: 2,
            inner: [
                {
                    id: 4,
                    inner: []
                }
            ]
        }, 
        {
            id: 5,
            inner: []
        },
        {
            id: 3,
            inner: []
        },
    ]
}]

То-есть из объекта box_id = 2, перенесли в box_id = 1

Алгоритм каким вижу его я
Находим элемент который хотим перенести,
Записываем этот элемент в переменную,
Удаляем этот элемент из массива,
Находим элемент в который необходимо вставить наш объект,
Пушим в свойство inner записанную ранее переменную
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
luemerg
@luemerg Автор вопроса
Дописал функцию удаления и переписал поиск (теперь функции чистые)
//GET
const findEl = (ar, id) => {
  return ar.reduce((a, el) => {
    if (a !== null)
      return a
    return el.id === id ? el : findEl(el.inner, id)
  }, null)
}
//REMOVE
const removeEl = (ar) => {
  for (let i = 0; i < ar.length; i++) {
    if (ar[i].inner.length)
      removeEl(ar[i].inner)
    if (ar[i].id === action.box_id)
      delete ar[i]
  }
}


Теперь если все красиво скоомбинировать, то все будет работать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы