Tengo una matriz como esta:
parent = [ {'id':'id_1','level':'1-1','children':['id':'id_1','level':'1-1-0','children':[........]}, {'id':'id_2','level':'2-2','children':['id':'id_1','level':'2-1-0','children':[........]} ]¿Cómo puedo obtener el índice de matriz principal que coincida con la condición del objeto de matriz secundaria?
Por ejemplo:
If (level == '2-1-0')Salida: 1
Comportamiento esperado:
Debería devolver 1 porque el nivel 2-1-0 está presente en el primer índice de la matriz principal
Nota: lo intenté como a continuación
var index = parent .findIndex(data => data.level== result.level);No verificará el objeto de matriz secundaria
Es un problema recursivo, que puede arruinar la pila de arreglos grandes.
El script atraviesa primero la profundidad del árbol y se puede optimizar para detectar la profundidad del nivel solicitado y solo verificar ese nivel, lo que aumenta el rendimiento.
var weirdProblem = level => (carry, current, idx) => { // bail if already found if (carry > -1) { return carry; } // check current item's children and return current idx if matching if (current.children.some(child => child.level === level)) { return idx; } // traverse current item's children return current.children.reduce(weirdProblem(level), -1); }; var index = parent.reduce(weirdProblem('2-1-0'), -1);no probó el script.
Su matriz proporcionada es incorrecta, pero creo que necesita algo como esto:
const parent = [ {'id':'id_1','level':'1-1','children':[{'id':'id_1','level':'1-1-0'}]}, {'id':'id_2','level':'2-2','children':[{'id':'id_1','level':'2-1-0'}]} ] const index = parent.findIndex(p => p.children.find(c => c.level === '2-1-0') !== undefined); console.log(index);En lugar de '2-1-0' debe colocar el índice que desea verificar.
en archivo .TS: -
const parent = [ {'id':'id_1', 'level':'1-1', 'children':[{'id':'id_1', 'level':'1-1-0'}]}, {'id':'id_2', 'level':'2-2', 'children':[{'id':'id_1', 'level':'2-1-0'}]} ] const index = parent.filter(x => x.children.find(x => x.level === '2-1-0') !== undefined); console.log(index);Prueba esto. Creo que funcionará.