Как объединить два объекта javascript с заменой значений по ключу, если он существует?

Есть 2 объекта:

var a = {
	a: 1,
	b: 2,
	c: 3
}
var b = {
	a: 4,
	c: 0,
	d: 10
}

Нужно значениями из объекта b заменить значения объекта a, при этом не добавляя новых переменных в объект, если их не существует.

Должно получиться:

c = {
	a: 4, // изменился так, как есть b.a 
	b: 2, // не изменился так, как нет b.b
	c: 0 // изменился так, как есть b.c 
        // d: 10 не добавилось так, как нет a.d
}

У меня пока есть решение:

objects = function (a,b) {
	var c = {};

	for (var i in a) {
		c[i] = typeof b[i] != 'undefined' ? b[i] : a[i];
	}

	return c;
}

Но может есть какой-то встроенный метод?
  • Вопрос задан
  • 24250 просмотров
Решения вопроса 2
@alvoro
Лучше проверять `key in b`, а не `typeof b[i] != 'undefined'`, так как значением ключа может быть и undefined
objects = function (a,b) {
  var c = {},
  key;
  for (key in a) {
    if (a.hasOwnProperty(key)) {
     c[key] = key in b ? b[key] : a[key];
    }
  }
  return c;
}
Ответ написан
AMar4enko
@AMar4enko
Встроенного нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@paulvoloschuk
Object.assign
Линк

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

console.log(Object.assign(a,b));   // result Object {a: 2, b: 2, c: 3}
Ответ написан
Комментировать
В jquery есть для этого функция extend(), если использование этой библиотеки в проекте допустимо.
Ответ написан
Комментировать
@v_m_smith
лучше бы я пил и курил
({ a: a.a = a.a, b: a.b = a.b, c: a.c = a.c } = b);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы