Как скопировать 2 объекта после добавления нового ключа в nodejs - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть 2 объекта, и я должен скопировать вторые объекты в новый объект после добавления нового ключа. например

obj1 = { name: 'a', age:'23'},
obj2 = {city1 : 'x', city2: 'y'},

ожидаемый результат -

{name:'a', age: '23', cities: [ {city1: 'x'}, {city2: 'y'}]}

я попробовал

obj3 = obj1;
obj3.cities = obj2;

но я получил

 { name: 'a', age:'23' }

В чем проблема с этим кодом и как копировать после добавления нового ключа?

Ответы [ 4 ]

2 голосов
/ 11 апреля 2019

Вы можете создать новый объект, разрушив obj1 и добавив к нему cities.

obj1 = {
  name: 'a',
  age: '23'
};

obj2 = {
  city1: 'x',
  city2: 'y'
};

obj3 = {
  ...obj1,
  cities: Object.entries(obj2)
    .map(([k, v]) => ({[k]: v}))
};

console.log(obj3);
1 голос
/ 11 апреля 2019

@ 31piy ответ отличный. Итак, я голосую за него.

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

obj1 = {
  name: 'a',
  age: '23'
};

obj2 = {
  city1: 'x',
  city2: 'y'
};

composedObj = Object.assign({}, obj1, {'cities': Object.entries(obj2).map(([k, v]) => ({[k]: v}))})
console.log(composedObj);
1 голос
/ 11 апреля 2019

вот ответ

let obj1 = {
  name: 'a',
  age: '23'
};
let obj2 = {
  city1: 'x',
  city2: 'y'
};

let obj3 = {
    ...obj1, 
    cities: Object.keys(obj2).map(function(item) {
    return {
      [item]: obj2[item]
    }
  })}

console.log(obj3)
1 голос
/ 11 апреля 2019

Вы можете использовать object.assign, а затем использовать Object.keys на obj2.Это даст массив вроде [city1,city2].Используйте map для итерации этого массива и создания нового ключа и значения

let obj1 = {
  name: 'a',
  age: '23'
};
let obj2 = {
  city1: 'x',
  city2: 'y'
};

let obj3 = Object.assign({}, obj1, {
  cities: Object.keys(obj2).map(function(item) {
    return {
      [item]: obj2[item]
    }
  })
});

console.log(obj3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...