Сборка объекта из массивов [без Map()]
Привет всем.
Собираю объект для отображения в DOM из массивов с объектами. В каждом массиве содержатся специфические свойства для, в качестве ключа - object_id. Пример массивов: info: [ { id: 26, name: "CWVA", group: "EA211" } { id: 90, name: "CWVB", group: "EA211" } ] sensors: [ { id: 1, object_id: 19, name: tempOil, value: 115 } { id: 3, object_id: 90, name: tempOut, value: 9 } { id: 2, object_id: 26, name: tempOil, value: 90 } ... ] props: [ { id: 1, object_id: 26, status: off, RpM: 0 } { id: 2, object_id: 90, status: on, RpM: 1208 } ... ] На выходе мне нужен объект, вида: myObject { id: 26, name: "CWVA", group: "EA211", sensors: [ tempOil: 90, ... ], props: { status: off, RpM: 0 } } Сейчас я пропускаю через for of все массивы и беру из них элемент с нужным object_id. Проблема в том, что кол-во объектов растёт, а массивы со свойствами для обновления таких объектов прилетают всё чаще. Думал перейти на Map(), но такой возможности нет (VueJS не поддерживает рендеринг DOM через директиву v-for с параметром в виде объекта Map, только простые массивы/объекты). Может кто подскажет как можно оптимизировать код? Можно ли избавиться от циклов, не перебирать постоянно каждый?? Заранее спасибо за ответы! P.S.: Не очень хочется связываться с промисами в данном контексте, т.к., на сколько я понимаю, может быть переполнение стека... |
shurikkan,
может один раз из массива сделать объект и не мучатся больше с for. |
Цитата:
Я может не понял о чём ты. Можно подробнее? |
shurikkan,
info = [ { id: 26, name: "CWVA", group: "EA211" }, { id: 90, name: "CWVB", group: "EA211" } ] sensors = [ { id: 1, object_id: 19, name: "tempOil", value: 115 }, { id: 3, object_id: 90, name: "tempOut", value: 9 }, { id: 2, object_id: 26, name: "tempOil", value: 90 }, ] props = [ { id: 1, object_id: 26, status: "off", RpM: 0 }, { id: 2, object_id: 90, status: "on", RpM: 1208 } ] i = info.reduce((obj, {id, name, group}) => (obj[id] = {id, name, group}, obj), {}) s = sensors.reduce((obj, {object_id, name, value}) => (obj[object_id] = {name, value}, obj), {}) p = props.reduce((obj, {object_id, status, RpM}) => (obj[object_id] = {status, RpM}, obj), {}) const create = id => { const obj = i[id], sensors = s[id], props = p[id]; return {...obj, sensors, props} } console.log(create(26)); console.log(create(90)) |
Цитата:
Сейчас ничего непонятно. У вас real-time прилетают десятки тысяч изменений отображаемых моделей в течении малого кол-ва времени? Не пробовали на сервере формировать данные и отдавать их уже в нужном клиенту виде? Вам не кажется, что, исходя из ваших данных, итоговый объект должен несколько иначе выглядеть? Как-то так: { id: 26, name: "CWVA", group: "EA211", sensors: [ tempOil: 90, ... ], props: [ { status: off, RpM: 0 }, ... ] } |
shurikkan,
в момент получения массива преобразуйте его в объект, а лучше сразу на сервере это сделать. |
Цитата:
Всем спасибо за советы! |
Часовой пояс GMT +3, время: 15:08. |