Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

184
Vistas
Add data to nested object using dynamic keys

I have an empty object structured like so :

let users = {
  "type1": {
      "group1": {
          "role1": {}
      },
      "group2": {
          "role2": {},
          "role3": {},
          "role4": {}
      },
  },
  "type2": {
      "group1": {
          "role1": {}
      },
      "group2": {
          "role2": {}
      },
      "group3": {
          "role3": {},
          "role4": {}
      }
  }
};

I am then fetching my users with an associated type, group and role for each one. I would like to dynamically add my users to my object above in the right type/group/role combination as they are stored in variables.

I tried something like this but this is wrong:

fetchedUsers.forEach(user => {
  users[user.type][user.group][user.role].push(user.email);
})

Is there a way to do this similar to what I tried ?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

You cannot push to an object. Your role is not an array

let users = { 
"type1": { "group1": { "role1": {} },
           "group2": { "role2": {}, "role3": {}, "role4": {}},},
"type2": { "group1": { "role1": {} },
           "group2": { "role2": {}},
           "group3": { "role3": {}, "role4": {}}}};

const fetchedUsers = [
  {"type":"type1","group": "group2", "role":"role3", "email":"x@useremail.com"},
  {"type":"type2","group": "group1", "role":"role1", "email":"y@useremail.com"}
];

fetchedUsers.forEach(
  ({type,group,role,email}) => users[type][group][role].email = email
);
console.log(users)

If you have more than one email per role, you need to make some keys

let users = { 
"type1": { "group1": { "role1": {} },
           "group2": { "role2": {}, "role3": {}, "role4": {}},},
"type2": { "group1": { "role1": {} },
           "group2": { "role2": {}},
           "group3": { "role3": {}, "role4": {}}}};

const fetchedUsers = [
  {"type":"type1","group": "group2", "role":"role3", "email":"x@useremail.com"},
  {"type":"type2","group": "group1", "role":"role1", "email":"y@useremail.com"},
  {"type":"type2","group": "group1", "role":"role1", "email":"z@useremail.com"}
];

fetchedUsers.forEach(
  ({type,group,role,email}) => {
    const currentRole = users[type][group][role]
    const len = Object.entries(currentRole).length
    currentRole[`email${len}`] = email
});
console.log(users)

or use an array

let users = { 
"type1": { "group1": { "role1": {} },
           "group2": { "role2": {}, "role3": {}, "role4": {}},},
"type2": { "group1": { "role1": {} },
           "group2": { "role2": {}},
           "group3": { "role3": {}, "role4": {}}}};

const fetchedUsers = [
  {"type":"type1","group": "group2", "role":"role3", "email":"x@useremail.com"},
  {"type":"type2","group": "group1", "role":"role1", "email":"y@useremail.com"},
  {"type":"type2","group": "group1", "role":"role1", "email":"z@useremail.com"}
];

fetchedUsers.forEach(
  ({type,group,role,email}) => {
    const currentRole = users[type][group][role]
    currentRole.emails = currentRole.emails || []
    currentRole.emails.push(email)
});
console.log(users)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Since users[user.type][user.group][user.role] is an object you can't use push()

If you initialise the empty role structures as arrays it should work.

let users = {
  "type1": {
      "group1": {
          "role1": []
      },
      "group2": {
          "role2": [],
          "role3": [],
          "role4": []
      },
  },
  "type2": {
      "group1": {
          "role1": []
      },
      "group2": {
          "role2": []
      },
      "group3": {
          "role3": [],
          "role4": []
      }
  }
};
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda