перебрать один объект и установить его значения из другого объекта | Javascript - PullRequest
1 голос
/ 14 апреля 2019

Скажем, у меня есть два объекта:

let obj1 = {
  name: 'obj 1',
  id: 1,
  color: "#fff",
  pages: []
}

let obj2 = {
  name: 'obj 2',
  id: 2,
  color: "#ddd"
}

Я хочу написать функцию, которая следует за этим логическим циклом через obj1, и если оба объекта obj1 и obj1 имеют одно и то же свойство, обновите свойство obj1, указав значение obj2.'

Таким образом, результат вернет obj1 со значением:

{
  name: 'obj 2',
  id: 2,
  color: "#ddd",
  pages: []
}

У меня возникла небольшая проблема, связанная с объектами, так как я не могу forEach или отобразить их

Спасибо!

Ответы [ 4 ]

1 голос
/ 14 апреля 2019

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

Если obj2 может иметь свойства, которые вам не нужныдля копирования приведем простой цикл for:

for (const prop in obj2) {
  if (prop in obj1) {
    obj1[prop] = obj2[prop];
  }
}

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

Если вы хотитечтобы ограничить это собственными свойствами объекта, вы можете использовать Object.keys:

for (const prop of Object.keys(obj2)) {
  if (prop in obj1) {
    obj1[prop] = obj2[prop];
  }
}

Обратите внимание, что любой подход будет копировать только "нормальные" свойства.Свойства, которые являются символами , должны обрабатываться отдельно через Object.get​OwnProperty​Symbols.

1 голос
/ 14 апреля 2019

Вы можете использовать

var a = [obj1,obj2];
 obj1 = Object.assign(...a);

let obj1 = {
  name: 'obj 1',
  id: 1,
  color: "#fff",
  pages: []
}

let obj2 = {
  name: 'obj 2',
  id: 2,
  color: "#ddd"
}
var a = [obj1,obj2];
obj1 = Object.assign(...a);
console.log(obj1)
0 голосов
/ 14 апреля 2019

Это гарантирует, что obj1 получает обновления только от obj2, а не новые свойства:

let obj1 = {
  name: 'obj 1',
  id: 1,
  color: "#fff",
  pages: []
}

let obj2 = {
  name: 'obj 2',
  id: 2,
  color: "#ddd",
  somethingElse: 'will not add this'
}

const result = Object.entries(obj1).reduce((a, c) => {
  a[c[0]] = obj2[c[0]] !== undefined ? obj2[c[0]] : c[1];
  return a;
}, {});

console.log(result);
0 голосов
/ 14 апреля 2019

Вы можете использовать распространение так:

let obj1 = {
  name: 'obj 1',
  id: 1,
  color: "#fff",
  pages: []
}

let obj2 = {
  name: 'obj 2',
  id: 2,
  color: "#ddd"
}

obj1 = { ...obj1, ...obj2 };

console.log(obj1);

(свойства могут быть в неправильном порядке, так как свойства объекта JavaScript неупорядочены).

Вы также можете использовать Object.assign:

let obj1 = {
  name: 'obj 1',
  id: 1,
  color: "#fff",
  pages: []
}

let obj2 = {
  name: 'obj 2',
  id: 2,
  color: "#ddd"
}

obj1 = Object.assign(obj1, obj2);

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