Как скопировать / перезаписать объект с помощью функции Object.assign ()?

1

Как полностью скопировать/перезаписать объект с помощью Object.assign()? Если будет другой подход, он будет высоко оценен. :) Цель состоит в том, чтобы обновить существующий объект до его нового значения.

Ниже приведен фрагмент кода, и ожидаемый результат должен быть таким же, как и значение объекта2.

Ожидаемый результат: {a: 8, b: 7}

const object1 = {
  a: 1,
  b: 2,
  c: {
    d: 3
  }
};

const object2 = {
  a: 8,
  b: 7
};

Object.assign(object1, object2);

console.log(object1);
  • 5
    Похоже, вы просто хотите скопировать object2 и полностью отказаться от существующего object1 ? Вы не должны использовать Object.assign для этого
  • 1
    обратите внимание, что вы не можете полностью заменить object1 так как он был объявлен с помощью const .
Показать ещё 1 комментарий
Теги:
angular

2 ответа

3
Лучший ответ

Для сохранения той же ссылки на объект вы можете удалить все свойства заранее, а затем присвоить Object.assign свойства Object.assign.

const object1 = { a: 1, b: 2, c: { d: 3 } };
const object2 = { a: 8, b: 7 };

Object.assign(
    Object.keys(object1).reduce((o, k) => (Reflect.deleteProperty(o, k), o), object1),
    object2
);

console.log(object1);

IE

var object1 = { a: 1, b: 2, c: { d: 3 } },
    object2 = { a: 8, b: 7 };

Object.keys(object2).reduce(
    function (object, key) {
        object[key] = object2[key];
        return object;
    }, 
    Object.keys(object1).reduce(function (object, key) {
        delete object[key];
        return object;
    }, object1)
);

console.log(object1);
  • 0
    Большое спасибо @ Нина Шольц! Это работает на моем проекте!
  • 0
    Привет @ Нина Шольц, я узнал, что deleteProperty не поддерживается в IE :( Есть ли другой вариант, который работает также в IE?
Показать ещё 2 комментария
0

Если вы хотите переопределить свойства object1 с object2, вам необходимо сделать это следующим образом:

object1 = Object.assign({}, object2);

Но с этим вам нужно объявить object1 с ключевым словом var чтобы вы могли присвоить ему новое значение.

Демо - версия:

var object1 = {
  a: 1,
  b: 2,
  c: {
    d: 3
  }
};

const object2 = {
  a: 8,
  b: 7
};

object1 = Object.assign({}, object2);

console.log(object1);
  • 0
    Спасибо, но это не работает для меня :(
  • 0
    @KimCindy Как я уже сказал, вам нужно изменить объявление с const object1 = на var object1= , посмотрите демонстрацию моего ответа.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню