Вы должны где-то хранить отдельные предметы, и когда коллекция прибудет, вам необходимо:
- Обработать каждый предмет коллекции, используя map .
- Для каждого элемента попробуйте найти его в сохраненных единичных элементах.
- Если найден, измените размер.
Я также включил запись вколлекция, которую нельзя найти, чтобы вы могли видеть, что там происходит: она остается неизменной.
Не обращайте внимания на небольшие изменения, которые я сделал для имитации сокетов.Надеюсь, вы сможете увидеть общую картину того, что я делаю.
Надеюсь, это поможет и удачного кодирования.
// Stores each single item that arrives.
let singleItems = [];
// ...this is the realtime record.
function socketOn1(channelName1, message1) {
console.log(channelName1, message1);
// Store each single item as it arrives.
singleItems.push(message1[0]);
};
// realtime snapshot collection of records
function socketOn2(channelName2, message2) {
console.log(channelName2, message2);
// For each element in the collection, find
// the same record in the single items and
// if found, update the price.
results = message2.map((elem) => {
found = singleItems.find(
(single) => single.price === elem.price
)
if (found) {
elem.size = found.size
}
return elem
})
console.log('results:')
console.log(results)
};
// This stuff just simulates stuff arriving to sockets.
// You can ignore it if you want. But look at the order
// in which they are called.
let singleItemsMock = [{
"price": 100,
"size": 0.01
},
{
"price": 50,
"size": 0.02
},
{
"price": 25,
"size": 0.03
},
{
"price": 10,
"size": 0.04
}
]
let collectionMock = [{
"price": 100,
"size": 0.001
},
{
"price": 50,
"size": 0.002
},
{
"price": 13,
"size": 0.005
}
]
socketOn1(null, [singleItemsMock[0]])
socketOn1(null, [singleItemsMock[1]])
socketOn1(null, [singleItemsMock[2]])
socketOn1(null, [singleItemsMock[3]])
socketOn2(null, collectionMock)