Create a dynamic object recursively

0

asked by anonymous 22.11.2018 / 20:48

2 answers

1

If I understand the question correctly, and if it is to follow the order of the properties as it appears in the array (in its example it has a reversal), nothing recursive is necessary, just a loop.

See the example below, with explanations line by line as comments:

// Lista de propriedades, considerando que uma
// é filha da outra.
var arr = ['caneta', 'cor', 'hexadecimal'];

// Guarda temporariamente cada item da array
let prop;

// Estado inicial do objeto é vazio
let obj = {};

// Referencia adicional ao objeto.
// Será modificada dentro do loop.
let path = obj;

// Loop tratando os elementos da array,
// um a um, na ordem.
while (prop = arr.shift()) {
  // Cria a propriedade atual
  // (com valor null no último nível)
  path[prop] = arr.length ? {} : null;
  
  // Path agora será o valor da propriedade
  // que acabamos de inserir.
  path = path[prop];
}

// Imprime o resultado
console.log(obj);

NOTE: This code changes the original array, which is empty at the end of the loop. If you do not want this side effect, adapt it to a for(;;) normal without using shift , it's simple.

    
22.11.2018 / 22:45
1

I created an alternative using functions of the Array object of javascript that I particularly like:

var obj = ['cor', 'caneta', 'hexadecimal'] 
.concat([null]) //Remover caso não queira que o ultimo seja sempre null
.reverse()
.reduce(function(a,b){
 return {[b]:a}
});
console.log(obj)

References:

  

Array Reduce - The method reduces () executes a reducer function (provided by you) for each member of the array, resulting in a single return value.

     

Array Concat - The concat () method returns a new array containing all arrays or values passed as a parameter

     

Array Reverse - The reverse () method reverses the items in an array. The first element of the array becomes the last and the last element becomes the first.

    
23.11.2018 / 02:37