> проверку каждого элемента массива по заданному элементу этого же массива
> После получения дочерних элементов, необходимо очистить от них исходный массив. Я не придумал ничего лучше, чем написать еще одну функцию.
Я не особо вникал, но кажется тут творится рекурсивный ад. Вам повезло, что JS довольно быстрый, иначе бы вы залипли на хоть сколько нибудь большом дереве.
Вам нужно построить массив-индекс по полю parent_id
TREE — исходный массив
BOOST — массив-индекс
1) Один раз пробегаетесь TREE и для каждого элемента
for NODE in TREE
BOOST[NODE.parent_id].push NODE
Теперь дочки для любого узла выбираются очень просто:
BOOST[NODE.id] #=> массив вложенных
Готовое и весьма быстрое решение для больших деревьев в моей репе на гитхабе:
Меня очень смутило, что человек пишущий о чтении книг 6 раз в тексте использовал НЕТУ.
Да, у меня гордая 3 по русскому языку в дипломе (единственная и потому особенно дорогая моему сердцу), но читать подобный текст мне весьма неприятно. Я знаю, что сейчас нету уже считают нормой, но меня все равно коробит. Мне очень интересно какие книги читает автор статьи.
Алексей, спасибо, с none и becomes не доводилось столкнуться. Возьму на карандаш. Хотя сейчас не вижу где можно было бы попробовать. Если честно, то не ожидал, что бы будите постить статьи тех характера. Успехов!
Автору несомненно благодарность за поделку. Всячески поддерживаю ваше начинание. Но есть несколько пожеланий:
1) Полностью согласен с комментарием пользователя termi в отношении фразы плохо расширять прототип. Видел ваш код накануне и это стало поводом воздержаться от звезды.
2) Жаль что написано не на coffee. Я сам хотел написать подобную поделку just for fun или присоединиться к разработке чего-то подобного. Но писать на чистом JS уже лень
В целом считаю идею проекта хоть и не новой, но весьма занятной и достойной потраченного времени. Желаю успехов!
да, все как вы говорите. Но вот что получается — я видел код «плоской» пробежки по дереву. Без рекурсий как у меня. И я не могу вам сказать, что тот код мне было легко понять и кастомизировать. Возможно вы знаете решение лучше, и это конечно же прекрасно, если вы покажете другой удобный путь. Мне тяжело давать оценки без конкретного кода. Если вам не трудно — напишите мне в скайп (он есть на гитхабе). как я понимаю вы сами занимались этим вопросом и у вас есть примеры наработанного кода. Было бы интересно пообщаться на эту тему.
ссылка выше ведет на строку с конкретным кодом. пояснение написал в комментах. сразу не написал — лишний повод для придирок. На хабре редко дают конструктивные предложения. На мой взгляд, особенности реализации лучше обсуждать в другом месте.
попробуйте отрисовать дерево рекурсией. главная проблема — выбрать на текущем уровне все дочерние узлы для данного parent_id. это операция ресурсоемкая. я просто построил индексный массив, где индекс массива — parent_id. Так для текущей ноды с id=100 я из индексного массива могу выбрать всех дочек просто обратившись children_nodes[100]. выбираю детей пачками и очень быстро. очень простое решение доступное школьнику 9 класса. Просто надо было правильно поставить вопрос, который я себе почему то очень поздно задал.
> После получения дочерних элементов, необходимо очистить от них исходный массив. Я не придумал ничего лучше, чем написать еще одну функцию.
Я не особо вникал, но кажется тут творится рекурсивный ад. Вам повезло, что JS довольно быстрый, иначе бы вы залипли на хоть сколько нибудь большом дереве.
Вам нужно построить массив-индекс по полю parent_id
TREE — исходный массив
BOOST — массив-индекс
1) Один раз пробегаетесь TREE и для каждого элемента
Теперь дочки для любого узла выбираются очень просто:
Готовое и весьма быстрое решение для больших деревьев в моей репе на гитхабе:
github.com/the-teacher/the_sortable_tree/blob/master/app/assets/javascripts/render_tree_helper.js.coffee#L29
Алгоритм настолько хорош, что прекрасно работает даже на ruby. Что уже само по себе является хорошим доказательством целесообразности подхода.
Да, у меня гордая 3 по русскому языку в дипломе (единственная и потому особенно дорогая моему сердцу), но читать подобный текст мне весьма неприятно. Я знаю, что сейчас нету уже считают нормой, но меня все равно коробит. Мне очень интересно какие книги читает автор статьи.
1) Полностью согласен с комментарием пользователя termi в отношении фразы плохо расширять прототип. Видел ваш код накануне и это стало поводом воздержаться от звезды.
2) Жаль что написано не на coffee. Я сам хотел написать подобную поделку just for fun или присоединиться к разработке чего-то подобного. Но писать на чистом JS уже лень
В целом считаю идею проекта хоть и не новой, но весьма занятной и достойной потраченного времени. Желаю успехов!
Ты завтра будешь? Тебе какой оставить?
так что это только цветочки. Скоро будут ягодки.
sass --watch input_dir:output_dir
Вот не знаю, то ли в отпуске к тебе в Тай съездить, то ли в Израиль рвануть =)