Tengo un objeto de usuarios en el que intento crear un objeto diferente llamado elemento utilizando los valores del objeto Usuarios. Mi código se ve a continuación. Quiero saber si este código se puede escribir de manera más eficiente, ya que quiero eliminar el objeto nulo de la salida.
var users = { "accounts": [{ "accountId": "210001" }, { "accountId": "90000", "accountText": "Sample" }, { "accountId": "4618891", "accountText": "Test" } ] }; var obj = {}; var element = {}, cart = []; users["accounts"].forEach(user => { obj = { ...obj, "M": { "accountId": { "S": user.accountId }, "accountText": { "S": user.accountText } } } cart.push(obj); }) element["L"] = cart; console.log(JSON.stringify(element))Rendimiento esperado
{ "L": [{ "M": { "accountId": { "S": "210001" } } }, { "M": { "accountId": { "S": "90000" }, "accountText": { "S": "Sample" } } }, { "M": { "accountId": { "S": "4618891" }, "accountText": { "S": "Test" } } } ] }No más pequeño pero más legible
var users = { "accounts": [{ "accountId": "210001" }, { "accountId": "90000", "accountText": "Sample" }, { "accountId": "4618891", "accountText": "Test" } ] }; var obj = {}; var element = {}, cart = []; users["accounts"].forEach(user => { obj = { ...obj, "M": { } }; if (user.accountText) obj.M.accountText = { "S": user.accountText} if (user.accountId) obj.M.accountId = { "S": user.accountId } cart.push(obj); }) element["L"] = cart; console.log(element)Reducir con borrar
var users = { "accounts": [{ "accountId": "210001" }, { "accountId": "90000", "accountText": "Sample" }, { "accountId": "4618891", "accountText": "Test" } ] }; const element = {}, cart = users["accounts"].reduce((acc,user) => { const obj = { "M": { accountText: { "S": user.accountText}, accountId : { "S": user.accountId } } } if (!user.accountText) delete obj.M.accountText if (!user.accountId) delete obj.M.accountId acc.push(obj); return acc },[]) element["L"] = cart; console.log(element)¿Quizás un código más corto con claves dinámicas?
const users = { accounts: [{ accountId: '210001' }, { accountId: '90000', accountText: 'Sample' }, { accountId: '4618891', accountText: 'Test' }, { accountId: '46188911', accountText: null } ] } const aa = users.accounts.map(x => { return { M: Object.entries(x) .reduce((acc, curr) => { return curr[1] // check for null values ? { ...acc, [curr[0]]: { S: curr[1] } } : acc }, {}) } }) const elements = { L: aa } console.log(JSON.stringify(elements, null, 2))Para clave interna y externa dinámica:
const users = { accounts: [{ accountId: '210001' }, { accountId: '90000', accountText: 'Sample' }, { accountId: '4618891', accountText: 'Test' }, { accountId: '46188911', accountText: null } ] } const outerKey = 'MM' const innerKey = 'SS' const aa = users.accounts.map(x => { return { [outerKey]: Object.entries(x) .reduce((acc, curr) => { return curr[1] // check for null values ? { ...acc, [curr[0]]: { [innerKey]: curr[1] } } : acc }, {}) } }) const elements = { L: aa } console.log(JSON.stringify(elements, null, 2))