Necesito crear dos resultados de body_Task dependiendo de Header_Tasks.type
Tareas_del_encabezado
[ {"_id":"AAA54" "title":"task 1" "type":1}, {"_id":"bbb45" "title":"task 2" "type":2}, {"_id":"ccc56" "title":"task 3" "type":1}, {"_id":"xxx98" "title":"task 4" "type":2}, ]Lo he creado dependiendo de Header_Tasks, su nombre es body_taks, guardo los datos (header, body) en mi base de datos porque tiene otras funciones en mi proyecto
body_taks
{ "AAA54":10, "AAA54|max":10, "bbb45":07, "bbb45|max":20, "ccc56":05, "ccc56|max":30, "xxx98":03, "xxx98|max":15, }Lo deseo, dos resultados dependiendo de Header_Tasks.type
tipo 1
{ "AAA54":10, "AAA54|max":10, "ccc56":05, "ccc56|max":30, }tipo 2
{ "bbb45":07, "bbb45|max":20, "xxx98":03, "xxx98|max":15, }Esto se puede hacer con un 'agrupar por' bastante estándar, creando primero un Mapa para buscar tipos y luego agrupando por tipo en el objeto de resultado.
const headerTasks = [{ _id: "AAA54", title: "task 1", type: 1 }, { _id: "bbb45", title: "task 2", type: 2 }, { _id: "ccc56", title: "task 3", type: 1 }, { _id: "xxx98", title: "task 4", type: 2 },]; const bodyTasks = { AAA54: 10, "AAA54|max": 10, bbb45: "07", "bbb45|max": 20, ccc56: "05", "ccc56|max": 30, xxx98: "03", "xxx98|max": 15, }; const typeMap = new Map(headerTasks.map((t) => [t._id, t.type])); const result = {}; for (const key in bodyTasks) { const id = key.includes("|") ? key.slice(0, key.indexOf("|")) : key; const t = typeMap.get(id); if (t !== undefined) { result[`type${t}`] ??= {}; result[`type${t}`][key] = bodyTasks[key]; } } console.log(result); Nota: he convertido los números precedidos por 0 en cadenas, ya que [los literales octales] no están permitidos en modo estricto y no estaba seguro de si los pretendías como octales.