Как использовать Object.assign для обновления вложенного объекта - PullRequest
0 голосов
/ 20 марта 2020

Я хочу использовать Object.assign перезаписать вложенный объект в объекте.

например, если у меня есть такой объект, как

let obj = {2: {fruit: "orange", animal: "dog"} 3: {fruit: "apple", animal: "cat"}}

Как бы я используйте Object.assign для обновления, например, второго объекта с ключом 3 до {fruit: "banana", animal: "pig"}, но при этом сохраняйте структуру obj?

Это решение должно быть динамически c, так что если, например, следующий время первый объект с ключом 2 может быть обновлен до {fruit: "strawberry", animal: "bat"}

РЕДАКТИРОВАТЬ

Таким образом, новый возвращаемый объект будет

{2: {fruit: "orange", animal: "dog"} 3: {fruit: "banana", animal: "pig"}}

EDIT2

Решение должно быть динамичным c

EDIT3

Кажется как хотя это не может быть достигнуто только с Object.assign, так есть ли для этого решение для глубокого копирования?

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Попробуйте это ниже:

let data = {2: {fruit: "orange", animal: "dog"} 3: {fruit: "apple", animal: "cat"}}

Object.assign(data[3], {fruit: "banana", animal: "pig"});

console.log(data)
0 голосов
/ 20 марта 2020

Первое, что нужно сделать, это не называть ваш объект «Объект»:

let obj = {2: {fruit: "orange", animal: "dog"} 3: {fruit: "apple", animal: "cat"}};

Тогда вы можете использовать Object.assign() на obj[3]:

Object.assign(obj[3], {fruit: "banana", animal: "pig"});

(Если вы используете «Объект» как имя переменной, вы теряете доступ к глобальному «Объекту», делая невозможным использование Object.assign.)

Если вам нужен совершенно новый объект, вам придется делать копии вложенные объекты, потому что Object.assign() выполняет только поверхностное копирование . В вашем случае это довольно просто, но в целом создание глубокой копии может быть очень сложным:

let newObj = {
  2: Object.assign({}, obj[2]),
  3: {fruit: "banana", animal: "pig"}
};
...