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.

Creando un Objeto multidimensional dinámicamente a partir de un array multidimensional.

Estoy intentando crear un objeto multidimensional como este:

{ A : {a1: {},a2:{}}, B: {b1:{},b2:{}}}

a partir de una matriz multidimensional como esta:

let array1 = [
      ['A', 'a1'],
      ['A', 'a1'],
      ['A', 'a2'],
      ['B', 'b1'],
      ['B', 'b1'],
      ['B', 'b2'],
    ];

He estado intentando durante horas y también he estado leyendo muchos artículos aquí en StackOverflow, pero nada se ajusta realmente a este caso específico.

Lo que he hecho hasta ahora:

let array1 = [
      ['A', 'a1'],
      ['A', 'a1'],
      ['A', 'a2'],
      ['B', 'b1'],
      ['B', 'b1'],
      ['B', 'b2'],
    ];

let object1 = {};

array1.forEach(function (subArray) {
    let level1 = subArray[0];
    let level2 = subArray[1];

    object1[[level1]] = { ...{ [level2]: {} } };
});

console.log('object: ', object1);
//resultado deseado: object = { A : {a1: {},a2:{}}, B: {b1:{},b2:{}}}
//lo que obtengo: object = { A : {a2:{}}, B: {b2:{}}}

Así que de alguna manera en mi código, las entradas como {a1: {}} se están sobrescribiendo en cada iteración en lugar de agregar una nueva entrada.

Muchas gracias por adelantado.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para alcanzar la salida deseada, puede modificar su código de la siguiente manera:

    let array1 = [
      ['A', 'a1'],
      ['A', 'a2'],
      ['B', 'b1'],
      ['B', 'b2'],
    ];
    
    let object1 = {};
    
    array1.forEach(function(subArray) {
      let level1 = subArray[0];
      let level2 = subArray[1];
      if (!object1[level1]) {
        object1[level1] = {};
      }
      object1[level1][level2] = {};
    });
    
    console.log('object:', object1);
    // Output: object = { A : {a1: {},a2:{}}, B: {b1:{},b2:{}}}
    

    Esto es lo que ha cambiado:

    • El array de entrada original se modifica para eliminar entradas duplicadas de ‘a1’ y ‘b1’.
    • En lugar de crear directamente un objeto con dos niveles, primero creamos un objeto con solo el primer nivel.
    • Luego, para cada subarray, verificamos si ya existe una clave para el primer nivel en el objeto. Si no existe, la creamos. Esto garantiza que no sobrescribamos ninguna clave existente para el primer nivel.
    • Finalmente, agregamos el par clave-valor del segundo nivel al objeto del primer nivel correspondiente.

Comments are closed.