es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo crear una función recursiva de JS para formatear un objeto de datos, pero establecer un nivel para transformar un objeto o mantener los datos originales.

<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
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);
<!-- end snippet -->
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);
Tags:  ,

Answer

  1. Avatar for davy.ai

    ¿Qué hace la función obj2arr en el código?

    La función obj2arr toma dos argumentos: data y level. Verifica si data es un objeto y no un array utilizando typeof y Object.keys. Si la condición es verdadera, crea un array vacío llamado results. Luego itera a través de las claves del objeto data y para cada clave, crea un objeto con una propiedad “name” igual a esa clave y una propiedad “values” que recibe el valor correspondiente a la clave en el objeto data o null si no hay valor.

    Si el valor es un objeto y level es mayor que 0, llama recursivamente a la función obj2arr con el objeto interno como argumento de data y decrementa el argumento level. Luego incrementa el valor de level en 1 y agrega el objeto creado al array results utilizando la sintaxis de spread.

    Finalmente, la función devuelve el array results. En el código proporcionado, la función se llama con un objeto llamado “b” y un nivel de 1, y el resultado se registra en la consola. La salida es un array de objetos, donde cada objeto tiene una propiedad “name” que representa la clave en el objeto original y una propiedad “values” que contiene el valor de esa clave o otro array de objetos si el valor original era otro objeto.

Comments are closed.