Recibo estas cadenas enormes a través de WebSocket:
[ "BTC-31DEC21-100000-P", "{\"data\":{\"bids\":{\"0.01\":{\"price\":0.01,\"volume\":66.2,\"exchange\":\"DER\"},\"5.0E-4\":{\"price\":5.0E-4,\"volume\":1.1,\"exchange\":\"DER\"},\"0.637\":{\"price\":0.637,\"volume\":8.4,\"exchange\":\"DER\"}},\"asks\":{\"0.664\":{\"price\":0.664,\"volume\":8.4,\"exchange\":\"DER\"}}},\"isMasterFrame\":true}" ]o
[ "BTC-31DEC21-36000-C", "{\"data\":[{\"price\":0.422,\"volume\":8.4,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.423,\"volume\":0.0,\"exchange\":\"DER\",\"side\":\"ASKS\"}],\"isMasterFrame\":false}" ]o
[ "BTC-31DEC21-60000-P", "{\"data\":[{\"price\":0.105,\"volume\":0.0,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.1055,\"volume\":28.7,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.106,\"volume\":7.6,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.1065,\"volume\":43.0,\"exchange\":\"DER\",\"side\":\"ASKS\"}],\"isMasterFrame\":false}" ] Quiero crear un búfer de JavaScript donde pueda almacenar los datos y restablecerlos si recibo JSON con isMasterFrame = true
let payload = JSON.parse(messageString[1]); if (payload.hasOwnProperty("isMasterFrame")) { for (let i = 0; i < payload.pairs.length; i++) { let currentPair = payload.data[i] currentPair = currentPair.replace(/\0/g, ''); //Remove null chars if (currentPair.toUpperCase() != 'KILL') { // reset the buffer and start again to fill data } } } else { // if we receive "isMasterFrame":false just update the data without reset }¿Cuáles son las opciones disponibles para implementar este búfer?
Creo que esto es lo que buscas. Almacena en caché los detalles hasta que encuentra isMasterFrame: true && KILL , momento en el cual borra el caché y comienza de nuevo.
EDITAR: datos almacenados usando una cadena de estilo BTC como clave y datos como valor para habilitar la consulta de caché.
let messageCache = {}; const messages = [ ["BTC-31DEC21-36000-C", "{\"data\":[{\"price\":0.422,\"volume\":8.4,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.423,\"volume\":0.0,\"exchange\":\"DER\",\"side\":\"ASKS\"}],\"isMasterFrame\":false}"], ["BTC-31DEC21-36000-D", "{\"data\":[{\"price\":0.422,\"volume\":8.4,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.423,\"volume\":0.0,\"exchange\":\"DER\",\"side\":\"ASKS\"}],\"isMasterFrame\":false}"], ["BTC-31DEC21-60000-P", "{\"data\":[{\"price\":0.105,\"volume\":0.0,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.1055,\"volume\":28.7,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.106,\"volume\":7.6,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.1065,\"volume\":43.0,\"exchange\":\"DER\",\"side\":\"KILL\"}],\"isMasterFrame\"\:true}"], ["BTC-31DEC21-60000-Q", "{\"data\":[{\"price\":0.105,\"volume\":0.0,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.1055,\"volume\":28.7,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.106,\"volume\":7.6,\"exchange\":\"DER\",\"side\":\"ASKS\"},{\"price\":0.1065,\"volume\":43.0,\"exchange\":\"DER\",\"side\":\"ASKS\"}],\"isMasterFrame\"\:false}"] ]; function processData(key, payload) { if (!payload.isMasterFrame) { messageCache[key] = payload; return; } for (let obj of payload.data) { Object.values(obj).forEach(item => { item = item.toString().replace(/\0/g, ''); //Remove null chars if (item.toUpperCase() !== 'KILL') { messageCache = {}; // Clear the cache/buffer } }); } } function queryCache(key){ return messageCache[key]; } messages.forEach(message => { const payload = JSON.parse(message[1]); processData(message[0], payload); console.log("Number of cached messages: " + Object.keys(messageCache).length); }); console.log('Query Cache [BTC-31DEC21-60000-Q]:'); let result = queryCache('BTC-31DEC21-60000-Q'); console.log(result);