Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

131
Visualizações
Iterate through a nested object, and copy values from other if they don't exist

I have a complex question that I can't figure out the answer to. So in my Discord bot, I have a little object called config. I also have a baseConfig object, which are the defaults used when the bot is added to a new server. Sometimes, I update my bot in a way that requires a new config value- I want to be able to add it to baseConfig and have the new key reflected across config. (In reality the config object has nested objects for different guilds, but I'm writing it in a way where this is irrelevant). As an example, let's say obj1 is a config, and obj2 is the base config.

let obj1 = {
   emojiSettings: {
      success: ":success:",
      error: ":error:"
   },
   warnSettings: {
      muteThreshold: 3,
      expireHours: 48
   }
}

Let's say I update obj2 with a brand new config:

// defaults
let obj2 = {
   emojiSettings: {
      success: ":defaultSuccess:"
      error: ":defaultError:"
   }
   warnSettings: {
      muteThreshold: 2,
      expireHours: 24
   }
   newConfig: {
      newOption: 4
   }
}

I want all the settings in obj1 to stay the same, but add the objects and keys that were updated in obj2.

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

I would write a function to deeply compare the two that iterates over every property. If the property doesn't exist in obj1, it adds it. If the property does exist in obj1, it checks to see if that property is an object (but not an array), and, if it is, the function recursively calls itself to make sure all of that object's properties also exist in obj1.

const updateObject = (o1, o2) => {
  Object.entries(o2).forEach((prop) => {
    const propName = prop[0];
    if (!o1[propName]) {
      if (typeof o2[propName] !== 'object' || Array.isArray(o2[propName])) {
        o1[propName] = o2[propName];
      } else {
        o1[propName] = { ...o2[propName] };
      }
    } else if (typeof o2[propName] === 'object' && !Array.isArray(o2[propName])) {
      updateObject(o1[propName], o2[propName]);
    }
  });
};

updateObject(obj1, obj2);
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda