Мне нужно осущиствить переход от MySQL (Joomla, Nested Set) на ElasticSearch (Nested Set) + MongoDB (Nested Set), попутно отредактировав структуру. Отсюда это решение.
Возможно это можно было бы использовать как хранилище на клиентской стороне (но это уже догадки). Из БД подгружать данные на клиент и тот уже редактирует дерево, не нагружая при этом сервер. А когда редактирование завершено — записывает данные в БД. Тут конечно вопрос синхронизации с сервером.
iulanovy4, да, все верно. Если говорить конкретно о моей задаче то мне нужно осущиствить переход от MySQL (Joomla, Nested Set) на ElasticSearch (Nested Set) + MongoDB (Nested Set), попутно отредактировав структуру. Отсюда это решение. Возможно это можно использовать как хранилище на клиентской стороне (но это уже догадки).
Большое спасибо за критику, она помогает развиваться.
По поводу удаление ветки узлов, да вы абсолютно правы, внес изменения.
С сортировкой опять же да, лишние сортировки не нужны, убрал.
Что касается .map(n => nstd.Data[n.itemId]) позвольте не согласиться, эта конструкция вернет элемент из свйоства Data, а там храняться данные, а не узлы, мне же необходима информация по узлам. В качестве свойства data для каждого узла (как дополнение) я указывал элемент из свойства Data, но вся информация об узле также осталась.
О использовании map вместо forEach, разница методов в том, что один вернет новый массив, а второй вернет undefined. Если говорить о скорости, то я видел тесты, где map значительно быстрее forEach. Возможно не прав, если так — поправьте.
var nstd = this
Да, полностью согласен, не нужно так
Возможно это можно было бы использовать как хранилище на клиентской стороне (но это уже догадки). Из БД подгружать данные на клиент и тот уже редактирует дерево, не нагружая при этом сервер. А когда редактирование завершено — записывает данные в БД. Тут конечно вопрос синхронизации с сервером.
По поводу Map vs forEach: проводил такой эксперимент
Результаты такие:
forEachTest: 0.123ms
mapTest: 0.069ms
forEachTest: 0.122ms
mapTest: 0.078ms
forEachTest: 0.127ms
mapTest: 0.068ms
По поводу удаление ветки узлов, да вы абсолютно правы, внес изменения.
С сортировкой опять же да, лишние сортировки не нужны, убрал.
Что касается .map(n => nstd.Data[n.itemId]) позвольте не согласиться, эта конструкция вернет элемент из свйоства Data, а там храняться данные, а не узлы, мне же необходима информация по узлам. В качестве свойства data для каждого узла (как дополнение) я указывал элемент из свойства Data, но вся информация об узле также осталась.
О использовании map вместо forEach, разница методов в том, что один вернет новый массив, а второй вернет undefined. Если говорить о скорости, то я видел тесты, где map значительно быстрее forEach. Возможно не прав, если так — поправьте.
var nstd = this
Да, полностью согласен, не нужно так
Переписал все на Typescript.
github.com/orxtime/nestedsetsjs/blob/typescript/src/nestedsets.ts
Буду ждать от вас новых комментариев, спасибо.