Исправлять объекты с помощью RXJS

#angular #rxjs #ngrx

#angular #rxjs #ngrx

Вопрос:

Я считаю, что то, чего я пытаюсь достичь, похоже на HTTP Patch или функцию глубокого расширения, но я хочу достичь этого с помощью rxjs. Допустим, у меня есть следующие объекты:

 const arr1 = {
  obj1: { a: 'dog', b: 'cat', c: 'bird' },
  obj2: { a: 'boy', b: 'girl', c: 'guitar' },
  obj3: { a: '1', b: '2', c: '3' }
}

const arr2 = {
  obj1: { a: 'wolf', b: 'lion', c: 'hawk', z: 'bear' },
  obj2: { c: 'car'}
}
  

Затем я хочу использовать rxjs, чтобы получить следующий результат:

 const output = {
  obj1: { a: 'wolf', b: 'lion', c: 'hawk', z: 'bear' },
  obj2: { a: 'boy', b: 'girl', c: 'car' },
  obj3: { a: '1', b: '2', c: '3' }
}
  

Есть ли эффективный способ добиться этого?

Комментарии:

1. Можете ли вы подробнее объяснить свой случай? В чем причина использования RxJS здесь? Если все фрагменты данных являются объектами и доступны в одном фрагменте в текущий момент времени, я не понимаю, какое это имеет отношение к RxJS. Это просто глубокое слияние / расширение, которое имеет множество разных вариантов (кстати, это объекты объектов, а не массивы).

Ответ №1:

RxJS не предназначен для объединения объектов, это API для асинхронного программирования с наблюдаемыми потоками

Если вы хотите объединить объекты, вы можете использовать слияние Lodash

 var object = {
  'a': [{ 'b': 2 }, { 'd': 4 }]
};

var other = {
  'a': [{ 'c': 3 }, { 'e': 5 }]
};

_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
  

Или оператор распространения объекта (официально не поддерживается)
https://babeljs.io/docs/plugins/transform-object-rest-spread /