Hay datos devueltos desde el servidor que contienen una matriz de cadenas como una jerarquía como esta:
var array = [ "house.bedroom.bed", "house.kitchen.spoon", "house.kitchen.knife", "house.bedroom.sofa", "house.bedroom.tv", "plants.trees", "house.birds.parrot.grey" ]he creado con éxito una estructura de datos de árbol como objeto para hacer que los datos de salida en forma de árbol a continuación:
house bedroom bed sofa tv kitchen spoon knife birds parrot grey plants trees¿Y hay alguna forma de elegir una cuerda? por ejemplo, de la "cocina" solicitada, quiero devolver todo lo relacionado con esa cadena como esta:
house.kitchen.knife house.kitchen.spoonAquí los códigos que aprendí:
function find([key, values], string, temp = []) { var result; temp = temp.concat(key); if (key === string) { return temp.slice(1).join('.'); } values.some(a => result = find(a, string, temp)); return result; } var result = array.reduce((r, s) => { ('root.' + s).split('.').reduce((a, item) => { var array = a.find(([v]) => v === item); if (!array) { a.push(array = [item, []]); } return array[1]; }, r); return r; }, []).pop(); console.log(find(result, 'kitchen')); console.log(result);mi salida es:
house.kitchenPropongo filtrar la matriz original.
const data = ["house.bedroom.bed","house.kitchen.spoon", "house.kitchen.knife","house.bedroom.sofa","house.bedroom.tv", "plants.trees","house.birds.parrot.grey"]; const result = data.filter((path) => path.split('.').includes('kitchen')); console.log(result); .as-console-wrapper{min-height: 100%!important; top: 0}Creo que entiendo lo que estás preguntando. Resolvería este problema con recursividad.
function parse(items) { return items.reduce((acc, item) => { const k = item.slice(0, item.indexOf('.')) const v = item.slice(item.indexOf('.') + 1).split('.') const newItem = { [k]: v.length > 1 ? parse(v) : v } return Object.assign(acc, newItem) }, { }) } Esta no es una solución completa, pero debería transmitir la idea general. Para cada elemento de la matriz, divídalo en una clave y un valor. La clave será la cadena antes de la primera . , y el valor con sea la única cadena después de eso . , o un objeto que contiene niños.