Как стать автором
Обновить
4
0
Armashenko Artem @orxtime

Web-разработчик

Отправить сообщение
Спасибо за рекомендации, поправил.
Последнее вряд ли, тесты запускал отдельно друг от друга. Буду разбираться. Спасибо.
В мыслях было сделать универсальный переходник между Adjacency List, Matherialized Path, Nested Set, Closure Table и нормальным деревом.
Мне нужно осущиствить переход от MySQL (Joomla, Nested Set) на ElasticSearch (Nested Set) + MongoDB (Nested Set), попутно отредактировав структуру. Отсюда это решение.

Возможно это можно было бы использовать как хранилище на клиентской стороне (но это уже догадки). Из БД подгружать данные на клиент и тот уже редактирует дерево, не нагружая при этом сервер. А когда редактирование завершено — записывает данные в БД. Тут конечно вопрос синхронизации с сервером.
Убрал и childs. Теперь сразу return.

По поводу Map vs forEach: проводил такой эксперимент

const myAwesomeArray = Array.from({length: 1000}, (e,i) => i)

console.time("forEachTest")
myAwesomeArray.forEach(x => (x + x) * 10000000000)
console.timeEnd("forEachTest")

console.time("mapTest")
myAwesomeArray.map(x => (x + x) * 10000000000)
console.timeEnd("mapTest")


Результаты такие:

forEachTest: 0.123ms
mapTest: 0.069ms

forEachTest: 0.122ms
mapTest: 0.078ms

forEachTest: 0.127ms
mapTest: 0.068ms
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
Да, полностью согласен, не нужно так

Переписал все на Typescript.
github.com/orxtime/nestedsetsjs/blob/typescript/src/nestedsets.ts

Буду ждать от вас новых комментариев, спасибо.
Большое спасибо, обязательно займусь

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность