Проблема в том, что вы предполагаете, что merge[key]
существует для всех ключей, но, очевидно, это не гарантируется. Таким образом, Object.assign(merge[key], .......)
может иметь первый аргумент как undefined
, что не дает желаемого эффекта (но приводит к ошибке).
Вместо этого создайте новый объект для первого аргумента и присвойте результат merge[key]
:
Object.keys(userKeyframes).forEach((key) => {
merge[key] = Object.assign({}, userKeyframes[key]);
});
Однако приведенное выше будет перезаписывать все, что находится в merge[key]
, до того, как произойдет назначение. Есть две альтернативы, которые вы можете использовать по-другому:
Вы можете выполнить назначение только тогда, когда merge[key]
еще не существует, поэтому вы можете назначить userKeyframes[key]
только в этом случае:
Object.keys(userKeyframes).forEach((key) => {
if (!(key in merge)) {
merge[key] = Object.assign({}, userKeyframes[key]);
}
});
Или, в качестве альтернативы, вы можете действительно объединить два объекта, когда оба уже существуют, то есть вы хотите иметь все свойства из userKeyframes[key]
, но также сохранить любые другие свойства, которые уже были в merge[key]
, которые будут уничтожены первым решением.
В этом случае предоставьте merge[key]
и userKeyframes[key]
в качестве 2 nd и 3 rd аргументов для Object.assign
, учитывая, что значения undefined
во всех, кроме первого аргумента, не представляют проблемы:
Object.keys(userKeyframes).forEach((key) => {
merge[key] = Object.assign({}, merge[key], userKeyframes[key]);
});
В этом последнем фрагменте кода, когда merge[key]
уже имеет значение, его свойства, которые не встречаются в userKeyframes[key]
, останутся, а те, которые имеют, будут перезаписаны свойствами из userKeyframes[key]
, как указано в документация по MDN:
Свойства более поздних источников будут ... перезаписывать более ранние.
person
trincot
schedule
24.04.2017
function(){}
, см. Оптимизированы ли функции, обозначенные жирной стрелкой, аналогично именованным функциям? - person guest271314   schedule 24.04.2017Object.assign
- person Bergi   schedule 24.04.2017