Показать сообщение отдельно
  #4 (permalink)  
Старый 31.10.2019, 18:45
Аспирант
Отправить личное сообщение для Andrew K Посмотреть профиль Найти все сообщения от Andrew K
 
Регистрация: 15.11.2014
Сообщений: 50

Сообщение от Malleys Посмотреть сообщение
А кто будет отлавливать исключения?
Когда нет совпадения, что скопировать, то должен возвращаться исходный объект без изменении
Спасибо за комментарий. Немного переписал функцию. Теперь если целевого объекта нет в объекте данных, то возвращает оригинальный объект данных.


Сообщение от Malleys Посмотреть сообщение
Фактически вы ничего не меняете в объекте, зачем нам нужен новый объект, в котором ничего не изменено. Это очень не очевидное API, которое способствует ошибкам. Используйте immer, в котором происходит копирование только при реальных изменениях! В отличие от вашего небезопасного кода, в immer исходный объект не изменяется и при одинаковых аргументах, выдаётся одинаковый результат.
По логике моей функции сначала создаётся копия объекта данных, а затем меняется. Но сейчас мне кажется вы правы и следует сделать еще один аргумент и сразу передавать изменённый объект данных.

А immer мне не подходит потому что в моём случае не известен полный путь до объекта, который будет изменён.
Ответить с цитированием