JavaScript — глубокое копирование в ES6 с использованием синтаксиса распространения

Альтернативное решение вашей конкретной проблемы (без глубокого копирования)

Тем не менее, я думаю, что если вы хотите изменить пару вещей, вы можете сэкономить себе немного работы. Я предполагаю, что вы контролируете все сайты вызовов для вашей функции.

  1. Укажите, что все обратные вызовы, передаваемые в mapCopy должны возвращать новые объекты, а не изменять существующий объект. Например:

     mapCopy(state, e ={amp}gt; { if (e.id === action.id) { return Object.assign({}, e, { title: 'new item' }); } else { return e; } }); 

    Это использует Object.assign для создания нового объекта, устанавливает свойства e для этого нового объекта, затем устанавливает новый заголовок для этого нового объекта. Это означает, что вы никогда не изменяете существующие объекты и создаете новые только при необходимости.

  2. mapCopy может быть очень простым:

     export const mapCopy = (object, callback) ={amp}gt; { return Object.keys(object).reduce(function (output, key) { output[key] = callback.call(this, object[key]); return output; }, {}); } 

По сути, mapCopy доверяет своим вызывающим сторонам делать правильные вещи. Вот почему я сказал, что это предполагает, что вы контролируете все сайты вызовов.

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector