Я проверил. Object.fromEntries() работает намного быстрее, чем { ...acc, props val }, но обычное добавление свойства всё же быстрее. Если оценивать сложность то она одинаковая: O(n) (простое добавление) против O(2n) (Object.fromEntries), а вот в абсолютном времени простое добавление свойства побыстрее.
Синтаксис { ...acc, newProp: value } настолько привлекателен, что порой действительно забываешь, что он может сильно повлиять на производительность.
Уже точно не помню где, давно было, читал, что добавление/удаление свойств существующему объекту достаточно тяжёлые операции. Для себя сделал "правило" стараться не расширять объекты вот так: obj[property] = value, где это может повлиять на производительность. В контексте статьи, решение для себя нашёл такое:
Да, я именно это я и написал. Возможно, не совсем точно выразил мысль. С точки зрения оценки сложности алгоритма O(n) = O(2n).
Действительно, что-то я увлёкся редьюсом)
Я проверил.
Object.fromEntries()
работает намного быстрее, чем{ ...acc, props val }
, но обычное добавление свойства всё же быстрее. Если оценивать сложность то она одинаковая: O(n) (простое добавление) против O(2n) (Object.fromEntries), а вот в абсолютном времени простое добавление свойства побыстрее.Синтаксис
{ ...acc, newProp: value }
настолько привлекателен, что порой действительно забываешь, что он может сильно повлиять на производительность.Уже точно не помню где, давно было, читал, что добавление/удаление свойств существующему объекту достаточно тяжёлые операции. Для себя сделал "правило" стараться не расширять объекты вот так:
obj[property] = value
, где это может повлиять на производительность. В контексте статьи, решение для себя нашёл такое:Если количество элементов
source
равно количеству свойств уnewObject
, то можно вообще избавиться от `push()`, а записывать вacc
по индексу:Но разница уже совсем не принципиальная. В хроме при n = 10 000 всего несколько миллисекунд.
Спасибо, буду иметь в виду.
Оператор
startWith
вроде как deprecated, не?