Обновите объект с соответствующими свойствами и игнорируйте новые свойства - PullRequest
0 голосов
/ 06 июля 2018

Я использую Typescript, и я хотел бы обновить объект другим, только на соответствующих ключах.

// Destination
objectOne = {
  a: 0,
  b: 0,
};

// Source
objectTwo = {
  a: 1,
  b: 1,
  c: 1,
};

// Expected
result = {
  a: 1,
  b: 1,
};

// Current solution
const current = {};
Object.keys(objectTwo).forEach(key => key in objectOne ? current[key] = objectTwo[key] : null);

console.log(current);

существует ли однострочник (т. Е. Не пользовательская функция, перебирающая ключи) , которая игнорировала бы свойство c в источнике? Я также хотел бы избежать использования таких библиотек, как lodash или JQuery.

Duplicate EDIT мой вопрос не о слиянии двух объектов, мой вопрос об игнорировании полей во втором объекте, которых нет в первом объекте.

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Я думаю, что нет встроенной функции для выполнения того, что вам нужно, а не пользовательской с перебиранием ключей первого объекта и значений второго:

const objectOne = {
  a: 0,
  b: 0
};

const objectTwo = {
  a: 1,
  b: 1,
  c: 1,
};

const result = Object.keys(objectOne).reduce((all, key) => {

    all[key] = objectTwo[key] || objectOne[key];

    return all;

},{});

console.log(result);
0 голосов
/ 30 июля 2018

Через некоторое время без ответов, кажется, самое короткое решение - это то, которое я предоставил сам:

Object.keys(newObj).forEach(key => key in oldObj? result[key] = newObj[key] : null)
0 голосов
/ 06 июля 2018
const result = Object.keys(objectOne)
    .reduce((init, key) => Object.assign(init, {[key]: objectTwo[key]}) , {});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...