Миграция в React c Context API в Mobx часть 1

В жизни можно бесконечно делать 3 вещи, смотреть как горит огонь, как течет вода и как я пытаюсь агитировать переписать react приложение с Context API на что-то более функциональное, на чем можно построить нормальную архитектуру приложения. Последнее время я все чаще выбираю mobx, поэтому поговорим сегодня про него. Так что же делать, если приложение уже написано, а с чего-то начать надо? Предположим, у нас есть компонент, который обращается к глобальному стейту приложения. ...

May 11, 2023 · 2 min · 357 words · lexich

Вставка отсортированных данных в JS

Когда я лет 10 назад писал на C++, то помню, как использовал структуру std:set чтобы сразу упорядоченно вставлять данные в массив. В JavaScript похожий Set завезли, но к сожалению компаратор в него не вставить. Придется засучить рукава и писать все самому. export function pushSortable<T>( list: T[], item: T, comparator: (a: T, b: T) => -1 | 0 | 1 ) { // находим позицию первого элемента который больше вставляемого const index = list.findIndex(list, item, (a, b) => comparator(a, b) === -1); // если не находим то добавляем в конец if (index < 0) { list.push(item); return; } // последовательно сдвигаем элементы на 1 позицию влево let tmp = item; for (let i = index, iLen = list.length; i <= iLen; i++) { tmp = list[i]; list[i] = item; item = tmp; } } На этом можно было бы остановиться. Но анализируя на сложность подобного решения, выясняется что findIndex - это O(N), а сдвиг элементов O(N). И если сдвиг элементов ускорить не получиться, то поиск можно заменить на бинарный и улучшить сложность до O(log N). ...

May 10, 2023 · 3 min · 560 words · lexich