Search
Write a publication
Pull to refresh
0
0
Алексей Скакун @alexskakun

User

Send message

Да, я именно это я и написал. Возможно, не совсем точно выразил мысль. С точки зрения оценки сложности алгоритма O(n) = O(2n).

Просто замените .reduce на .map.

Действительно, что-то я увлёкся редьюсом)

Честно говоря я рекомендую вам провести замеры.

Я проверил. Object.fromEntries() работает намного быстрее, чем { ...acc, props val }, но обычное добавление свойства всё же быстрее. Если оценивать сложность то она одинаковая: O(n) (простое добавление) против O(2n) (Object.fromEntries), а вот в абсолютном времени простое добавление свойства побыстрее.

Синтаксис { ...acc, newProp: value } настолько привлекателен, что порой действительно забываешь, что он может сильно повлиять на производительность.

Уже точно не помню где, давно было, читал, что добавление/удаление свойств существующему объекту достаточно тяжёлые операции. Для себя сделал "правило" стараться не расширять объекты вот так: obj[property] = value, где это может повлиять на производительность. В контексте статьи, решение для себя нашёл такое:

const newObject = Object.fromEntries(source.reduce((acc, item, i) => {
  acc.push([i, item]);
  return acc;
}, []));

Если количество элементов source равно количеству свойств у newObject, то можно вообще избавиться от `push()`, а записывать в acc по индексу:

const newObject = Object.fromEntries(source.reduce((acc, item, i) => {
  acc[i] = [i, item];
  return acc;
}, new Array(source.length)));

Но разница уже совсем не принципиальная. В хроме при n = 10 000 всего несколько миллисекунд.

Спасибо, буду иметь в виду.

Оператор startWith вроде как deprecated, не?

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity