GroupBy: изменить существующую группу на основе входящих значенийJavascript

Форум по Javascript
Anonymous
GroupBy: изменить существующую группу на основе входящих значений

Сообщение Anonymous »

Использование Rxjs, у меня есть код ниже: < /p>

Код: Выделить всё

const { Subject, groupBy, mergeMap, toArray, timer, map } = require('rxjs');

const waitTime = 1000

const mySource = new Subject();

mySource
.pipe(
groupBy(
(val) => {
return JSON.stringify(val.ids?.sort())
},
null,
() => timer(waitTime)
),
mergeMap(group$ => group$.pipe(
toArray(), // Makes whole thing wait till time is up
map(arr => arr[0]) // Only use first item (they will be equal anyway)
))
)
.subscribe(data => console.log(new Date().toISOString(),"subscriber GOT:",data));

// Code below is just for testing

async function sendToObs(data,delay) {
await new Promise(resolve => setTimeout(resolve,delay))
console.log(new Date().toISOString(), "Sending", data)
mySource.next(data);
}

async function myMain() {
await sendToObs({ ids: ['a','b'] }, 100);
await sendToObs({ ids: ['c','d'] }, 100);
await sendToObs({ ids: ['a','b'] }, 100);
await sendToObs({ ids: ['b','a'] }, 100);
await sendToObs({ ids: ['a','b'] }, 100);
await sendToObs({ ids: ['e','f'] }, 100);
await sendToObs({ ids: ['a','b'] }, waitTime + 500);
}

myMain();
< /code>
Что это должно сделать: < /p>

 duplicate входящие значения (на основе их идентификаторов < /code> свойство , не
относительно порядка) < /li>
 Держите их на второй < /li>
 После этого отправьте его подписчику. < /li>
< /ul>
, который, кажется, работает, и абонент получает как и ожидалось: < /p>
{ ids: [ 'a', 'b' ] }
{ ids: [ 'c', 'd' ] }
{ ids: [ 'e', 'f' ] }
{ ids: [ 'a', 'b' ] }
Теперь для задачи: если в любой момент, значение, подобное {mergemewith: ['e'], foo1: '7_e'} или {mergemewith: ['f '], foo2:' 42_f '} входит, он должен быть объединен вместе с {ids: [' e ',' f ']} , в результате чего вывод, такой как:

Код: Выделить всё

{ ids: [ 'a', 'b' ] }
{ ids: [ 'c', 'd' ] }
{ ids: [ 'e', 'f' ], mergeMeWith: ['e', 'f'], foo1: '7_e', foo2: '42_f' }
{ ids: [ 'a', 'b' ] }
Как мне это сделать?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ing-values

Вернуться в «Javascript»