Obtenemos un objeto no anidado
obj = { "your-email": "some@email.com", "prename": "Jane Doe", "service__1": "Google", "login__1": "support@google.com", "password__1": "PW1", "service__2": "Microsoft", "login__2": "admin@email.com", "password__2": "PW12!", "service__3": "Stackoverflow", "login__3": "supportadmin@email.com", "password__3": "3PW2!", "DPA": "1" }Nos gustaría transformar este objeto en la siguiente estructura:
nestedOBJ = { "your-email": "some@email.com", "prename": "Jane Doe", "DPA": "1", "service1": { "service__1": "Google", "login__1": "support@google.com", "password__1": "PW1" }, "service2": { "service__2": "Microsoft", "login__2": "admin@email.com", "password__2": "PW12!" }, "service3": { "service__3": "mySQL", "login__3": "supportadmin@email.com", "password__3": "3PW2!" }, "service4": { "...":"..." } }Se ha probado el siguiente código sin éxito:
let res = {} let length = Object.keys(obj).length -3; for (let i = 0; i < length ; i + 3){ console.log(steps.trigger.event.body[0]["service__"+i]) let onestedOBJ = { ["creds"+i]:steps.trigger.event.body[0]["service__"+i], ["creds"+i]:steps.trigger.event.body[0]["login__"+i], ["creds"+i]:steps.trigger.event.body[0]["password__"+i] } console.log(nestedOBJ) }No incluimos el DPA, su correo electrónico y prenombre. Porque el ciclo for ni siquiera funcionó.
const nested = {}; for (const [key, value] of Object.entries(obj)) { const [, num] = key.split("__"); if (num) { const parentKey = `service${num}`; if (nested[parentKey] === undefined) { nested[parentKey] = {}; } nested[parentKey][key] = value; } else { nested[key] = value; } }Array#reduce es una forma de hacerlo
let obj = { "your-email": "some@email.com", "prename": "Jane Doe", "service__1": "Google", "login__1": "support@google.com", "password__1": "PW1", "service__2": "Microsoft", "login__2": "admin@email.com", "password__2": "PW12!", "service__3": "Stackoverflow", "login__3": "supportadmin@email.com", "password__3": "3PW2!", "DPA": "1" } let subitems = ["service", "login", "password"]; let nestedOBJ = Object.entries(obj).reduce((b, a) => { let keya = a[0].split("__"); if (subitems.indexOf(keya[0]) > -1) { b[`service${keya[1]}`] = b[`service${keya[1]}`] || {} b[`service${keya[1]}`][keya[0]] = a[1]; } else b[a[0]] = a[1]; return b; }, {}); console.log(nestedOBJ);