⚠️Почему опасно использовать spread оператор С помощью spread оператора (…) можно передавать итерируемые коллекции (например, массивы или строки) в качестве аргументов функции или добавлять содержащиеся в них элементы в новый массив. Кроме того, этот синтаксис может использоваться для объектов, чтобы копировать пары ключ-значение из одного объекта в другой и вот здесь проявляется его темная сторона: мы случайно можем остановить выполнение нашего веб-приложения 🤡(если данных очень много) Например, у нас есть массив объектов и мы хотим его превратить в один объект: const cart = [ { id: '1', name: 'Apple'}, { id: '2', name: 'Orange'}, { id: '3', name: 'Cherry'}, ] const products = cart.reduce( (acc, item) => ({ ...acc, [item.id]: [item.name], }), {} ); Из примера мы видим только один цикл, но есть еще один… Внутренний цикл с оператором spread, который копирует существующие ключи аккумулятора в новый объект. ❗️Таким образом, даже если внутренний цикл не выполняется точно n раз на каждой итерации (потому что там зависим от ключей), можно сказать, что его сложность составляет O(n^2) Как мы можем изменить этот код? Есть множество решений, рассмотрим одно: const cart = [ { id: '1', name: 'Apple'}, { id: '2', name: 'Orange'}, { id: '3', name: 'Cherry'}, ]; const products = cart.reduce((acc, item) => { acc[item.id] = [item.name]; return acc; }, {}); 😅Теперь сложность стала просто O(n). Сравнить можно здесь 🪩Spread оператор был введен в JavaScript ES6 вместе с другими замечательными возможностями, но с большой силой приходит большая ответственность 💀
Оператор дробовика 🇷🇺
Оператор дробовика 🇷🇺 (Shotgun Operator) – это проект развития здоровой оружейной культуру среди гражданских владельцев оружия в России и не только. Мы делаем акцент на ответственном и эффективном владения самым доступным, мощным и универсальным гражданским оружием - тактическом ружье 12 калибра.
Канал · 1678