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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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