Pull to refresh
83
Илья Николаевич @zaykoread⁠-⁠only

Ruby on Rails / JavaScript / React

Send message
> проверку каждого элемента массива по заданному элементу этого же массива

> После получения дочерних элементов, необходимо очистить от них исходный массив. Я не придумал ничего лучше, чем написать еще одну функцию.


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

Вам нужно построить массив-индекс по полю parent_id

TREE — исходный массив
BOOST — массив-индекс

1) Один раз пробегаетесь TREE и для каждого элемента

for NODE in TREE
   BOOST[NODE.parent_id].push NODE


Теперь дочки для любого узла выбираются очень просто:

 BOOST[NODE.id] #=> массив вложенных


Готовое и весьма быстрое решение для больших деревьев в моей репе на гитхабе:

github.com/the-teacher/the_sortable_tree/blob/master/app/assets/javascripts/render_tree_helper.js.coffee#L29

Алгоритм настолько хорош, что прекрасно работает даже на ruby. Что уже само по себе является хорошим доказательством целесообразности подхода.
Меня очень смутило, что человек пишущий о чтении книг 6 раз в тексте использовал НЕТУ.
Да, у меня гордая 3 по русскому языку в дипломе (единственная и потому особенно дорогая моему сердцу), но читать подобный текст мне весьма неприятно. Я знаю, что сейчас нету уже считают нормой, но меня все равно коробит. Мне очень интересно какие книги читает автор статьи.
Алексей, спасибо, с none и becomes не доводилось столкнуться. Возьму на карандаш. Хотя сейчас не вижу где можно было бы попробовать. Если честно, то не ожидал, что бы будите постить статьи тех характера. Успехов!
Автору несомненно благодарность за поделку. Всячески поддерживаю ваше начинание. Но есть несколько пожеланий:

1) Полностью согласен с комментарием пользователя termi в отношении фразы плохо расширять прототип. Видел ваш код накануне и это стало поводом воздержаться от звезды.

2) Жаль что написано не на coffee. Я сам хотел написать подобную поделку just for fun или присоединиться к разработке чего-то подобного. Но писать на чистом JS уже лень

В целом считаю идею проекта хоть и не новой, но весьма занятной и достойной потраченного времени. Желаю успехов!
… горе от ума
да, все как вы говорите. Но вот что получается — я видел код «плоской» пробежки по дереву. Без рекурсий как у меня. И я не могу вам сказать, что тот код мне было легко понять и кастомизировать. Возможно вы знаете решение лучше, и это конечно же прекрасно, если вы покажете другой удобный путь. Мне тяжело давать оценки без конкретного кода. Если вам не трудно — напишите мне в скайп (он есть на гитхабе). как я понимаю вы сами занимались этим вопросом и у вас есть примеры наработанного кода. Было бы интересно пообщаться на эту тему.
ancestry не входит в круг моих интересов, обещать не буду. Хотя как знать. Возможно кто то решится сам сделать форк и доработать.
полностью согласен. Но ведь за то, что пошел другим путем — не расстреляют?
ссылка выше ведет на строку с конкретным кодом. пояснение написал в комментах. сразу не написал — лишний повод для придирок. На хабре редко дают конструктивные предложения. На мой взгляд, особенности реализации лучше обсуждать в другом месте.
попробуйте отрисовать дерево рекурсией. главная проблема — выбрать на текущем уровне все дочерние узлы для данного parent_id. это операция ресурсоемкая. я просто построил индексный массив, где индекс массива — parent_id. Так для текущей ноды с id=100 я из индексного массива могу выбрать всех дочек просто обратившись children_nodes[100]. выбираю детей пачками и очень быстро. очень простое решение доступное школьнику 9 класса. Просто надо было правильно поставить вопрос, который я себе почему то очень поздно задал.
<holywar> единственное место где не могу отказаться от скобок — SCSS. Мне нравится в нем писать {}, без этого CSS перестает быть CSS-ом.</holywar>
Сегодняшние тортики

image

image

Ты завтра будешь? Тебе какой оставить?
рецептиком поделитесь?
После коммента не могу разлогинится с хабра. Есть подозрение, что T сработал и здесь… :)
T.chikey.nyancat.post ;)
А кто-то кроме меня еще видел этот дизайн? (Видимо был деплой не той ветки)



так что это только цветочки. Скоро будут ягодки.
А зачем делать обертку, если есть встроенный watcher? Можете пояснить?

sass --watch input_dir:output_dir
vorbiz, троль, vorbiz, троль!!! бе-бе-бе!

Вот не знаю, то ли в отпуске к тебе в Тай съездить, то ли в Израиль рвануть =)

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity

Specialization

Fullstack Developer