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

199
Visualizações
How to create a JS recursive function to format a data object, but set a level to transform an object or keep the original data?

const obj2arr = (data, level) => {
  const dataKeys = "object" === typeof(data) && !Array.isArray(data) && Object.keys(data);
  let results = [];
  if (!!dataKeys) {
    for (let dataKey of dataKeys) {
      let obj = {
        name: dataKey
      }
      obj["values"] = data[dataKey] || null;
      if ("object" === typeof(data[dataKey]) && !Array.isArray(data[dataKey]) &&
        data[dataKey] && "object" === typeof(data[dataKey]) && level > 0) {
        obj["values"] = obj2arr(data[dataKey], level);
        --level
      }
      ++level
      results = [...results, obj];
    }
  }
  return results
}

let b = {
  a: [1, 2],
  b: 3,
  c: 'c',
  d: {
    d1: 'bla',
    d2: 'ble',
    d3: {
      e: 1,
      f: [1, 2],
      g: 'bli',
      h: {
        h1: 1,
        h2: 2
      }
    }
  }
};
res = obj2arr(b, 1);
console.log(res);

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

You should not have those level++ and level-- instructions. Instead pass level - 1 to the recursive call:

        obj["values"] = obj2arr(data[dataKey], level - 1);

This way the condition you already have (level > 0) will make sure that only up to the given level the transformation is made.

I didn't touch anything else in your code:

const obj2arr = (data, level) => {
  const dataKeys = "object" === typeof(data) && !Array.isArray(data) && Object.keys(data);
  let results = [];
  if (!!dataKeys) {
    for (let dataKey of dataKeys) {
      let obj = {
        name: dataKey
      }
      obj["values"] = data[dataKey] || null;
      if ("object" === typeof(data[dataKey]) && !Array.isArray(data[dataKey]) &&
        data[dataKey] && "object" === typeof(data[dataKey]) && level > 0) {
        obj["values"] = obj2arr(data[dataKey], level - 1);
      }
      results = [...results, obj];
    }
  }
  return results
}

let b = {
  a: [1, 2],
  b: 3,
  c: 'c',
  d: {
    d1: 'bla',
    d2: 'ble',
    d3: {
      e: 1,
      f: [1, 2],
      g: 'bli',
      h: {
        h1: 1,
        h2: 2
      }
    }
  }
};
res = obj2arr(b, 1);
console.log(res);

about 4 years ago · Juan Pablo Isaza 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