tengo esta matriz
["Fruits > Citrus > Orange", "Accessories > Bracelets"]Y necesito convertirlo en:
{ "lvl0": ["Fruits", "Accessories"], "lvl1": ["Fruits > Citrus", "Accessories > Bracelets"], "lvl2": ["Fruits > Citrus > Orange"] } ¿Cómo manejarías esto con un reductor? Me he acercado usando Lodash zip pero estoy un poco perdiendo la cabeza
¿Alguien tiene una función genial para hacer esto?
Puede haber una mejor manera, pero déjame explicarte mi proceso.
reduce en una matriz ordenada. En la primera instrucción If estoy inicializando los niveles en el objeto acumulador. Se accederá a la declaración if solo para el primer elemento.Bueno, en este ejemplo específico, la clasificación ni siquiera es necesaria ya que ya está ordenada.
let a = ["Fruits > Citrus > Orange", "Accessories > Bracelets"] let res = a.map((el)=> el.split(" > ")).sort((a,b) => b.length-a.length).reduce((acc,curr)=>{ let levels = curr.length; if(!Object.keys(acc).length){ for(i=0; i<levels;i++){ acc[`lvl${i}`]=[] } } for(i=0; i<levels;i++){ acc[`lvl${i}`].push(curr.slice(0,i+1).join(" > ")) } return acc; },{}) console.log(res)