Угловой редуктор из массива - PullRequest
0 голосов
/ 04 июня 2019

Я понимаю, что для подсчета массива в Angular с rxjs я использую Reduce, например, если я хочу count: [{id: 1, items: [10, 20, 30]}] Я использую следующий код:

const item = from([{id: 1, items: [10, 20, 30]}]);
item.pipe(
  map(actions => actions.items),
  mergeAll(),
  reduce((acc, i) => acc + i, 0)
).subscribe(p => console.log('Print 60: ', p)); 

Вопрос в том, как получить преобразователь в следующем массиве:

const items = [
{
  id: 1,
  boxing: [1, 2, 2]
},
{
  id: 2,
  boxing: [10, 10, 20]
}]; 

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

[{
  id: 1,
  boxing: 5
},
{
  id: 2,
  boxing: 40
}]

Буду признателен за вашу помощь

Ответы [ 2 ]

6 голосов
/ 04 июня 2019

Вы можете легко сделать это с помощью JavaScript, используя reduce и map в качестве

const items = [
     {id: 1, boxing: [1, 2, 2]},
     {id: 2, boxing: [10, 10, 20]}
];

let reducedItems = items.map(val => {
  return {
    id: val.id,
    boxing: val.boxing.reduce((a, i) => a + i)
   }
});

console.log(reducedItems);
0 голосов
/ 04 июня 2019

Один из подходов может быть таким.

from(items).pipe(
  mergeMap((data) => from(data['boxing']).pipe(
    reduce((acc, x) => acc + x),
    map((val) => { data['boxing'] = val; return data })
  )),
  toArray()
).subscribe((val) => console.log(val));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...