• Как сделать дерево объектов из массива?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Не специалист по JS, но похоже там можно сделать проще чем стандартный обход графа в ширину/глубину.

    Заведите мап объектов, которые будете собирать. Ключи будудт айдишники, а значения - объекты. У объектов заполните uid, parentUID, пустой Map children и пустой список children_list. Так же запомните куда-то id, у которого null отец.

    Потом еще одним проходом по списку всех элементов заполните children_list у всех обхектов в Map из прошлого шага (кладите текущий id в список для parentUID).

    Потом еще одним проходом по всем элементам этого Map соберите дерево: обойдите список детей и в Map children кладите 'id' => объект из внешнего Map'а по данному ключу. После прохода можно children_list удалить.

    Если я правильно понимаю, как работает JS, то у вас будет не копироваться объект а его ссылка. В итоге в Map будут осодержаться вообще все поддеревья ссылыющееся друг на друга. Можно потом вырвать оттуда объект по ключу id корня и Map удалить.
    Ответ написан
    Комментировать
  • Как сделать дерево объектов из массива?

    0xD34F
    @0xD34F Куратор тега JavaScript
    function createTreeFromArray(arr, key, parentKey) {
      const tree = Object.fromEntries(arr.map(n => [ n[key], { ...n } ]));
    
      return Object.fromEntries(Object.entries(tree).filter(([ , n ]) => {
        return !(tree[n[parentKey]] && ((tree[n[parentKey]].children ??= {})[n[key]] = n));
      }));
    }
    
    
    const tree = createTreeFromArray(arr, 'uid', 'parentUID');
    Ответ написан
    4 комментария
  • Как правильно добавлять данные в mongoose?

    @RidgeA
    Если в User и Category надо добавить id поста - я бы использовал findAndUpdate - это сделает поиск и обновление одним промисом.

    Стоит ли это делать вообще - тут скорее вопрос к тому, как надо эту информацию получать, возможно достаточно в Post сохранить id автора и id категории ....

    Для категории - явно напрашивается не сохранять id каждого поста в категорию, а наоборот - иначе придется руками обеспечивать консистентность данных при удалении постов.

    Но это все предположения без знания того, что должно делать приложение. Возможно в твоем случае такой подход и оправдан...
    Ответ написан
    1 комментарий