Estoy tratando de pasar una clave a una función recursiva y encontrar y devolver ese objeto con esa clave.
Esta es la matriz en la que me gusta buscar
const treeData = [ { title: 'parent 1', key: '0-0', children: [ { title: 'parent 1-0', key: '0-0-0', disabled: true, children: [ { title: 'leafffff', key: '0-0-0-0', disableCheckbox: true, }, { title: 'leaf', key: '0-0-0-1', }, ], }, ], }, ];Y esta es mi función actual.
function findNode(x, key) { if (x.key === key) return x else if (Array.isArray(x)) { return x.map(item => { const r = findNode(item, key) if (r) return r if (item.children) return findNode(item.children, key) }) } }Ejemplo en vivo:
const treeData = [ { title: 'parent 1', key: '0-0', children: [ { title: 'parent 1-0', key: '0-0-0', disabled: true, children: [ { title: 'leafffff', key: '0-0-0-0', disableCheckbox: true, }, { title: 'leaf', key: '0-0-0-1', }, ], }, ], }, ]; function findNode(x, key) { if (x.key === key) return x else if (Array.isArray(x)) { return x.map(item => { const r = findNode(item, key) if (r) return r if (item.children) return findNode(item.children, key) }) } } const node = findNode(treeData, '0-0-0-1') console.log(node)Usando esta función puedo encontrar el resultado pero no está en el formato actual. Me gusta obtener un solo objeto pero me da una matriz anidada con ese objeto en el niño más anidado
Puede iterar la matriz y salir antes de buscar, ya sea encontrando el nodo directamente o encontrando iterando los elementos secundarios.
const find = (key, array = []) => { let node; array.some(object => node = object.key === key ? object : find(key, object.children) ); return node; } data = [{ title: 'parent 1', key: '0-0', children: [{ title: 'parent 1-0', key: '0-0-0', disabled: true, children: [{ title: 'leafffff', key: '0-0-0-0', disableCheckbox: true }, { title: 'leaf', key: '0-0-0-1' }] }] }]; console.log(find('0-0', data)); console.log(find('0-0-0', data)); console.log(find('0-0-0-0', data)); console.log(find('0-0-0-1', data)); .as-console-wrapper { max-height: 100% !important; top: 0; } const treeData = [ { title: 'parent 1', key: '0-0', children: [ { title: 'parent 1-0', key: '0-0-0', disabled: true, children: [ { title: 'leafffff', key: '0-0-0-0', disableCheckbox: true }, { title: 'leaf', key: '0-0' }, ], }, ], }, ]; const findNodeInTree = (tree, key) => { let result = null; tree.forEach(node => { if (node.key === key) { result = node; } else if (node.children) { result = findNodeInTree(node.children, key); } }); return result; } console.log(findNodeInTree(treeData, '0-0-0-0'));