Estoy tratando de llamar a esta función deepFilter en una matriz con esta estructura, pero recibo este error en la consola: TypeError: Cannot read properties of undefined (reading 'reduce')
y no puedo entender por qué. Estoy seguro de que es algo simple, pero me estoy quedando en blanco.
¿Alguien me puede apuntar en la dirección correcta?
const items = [ { "name":"Name1", "id":58, "sites":[ { "id":106, "name": "Name11", "items":[ { "name":"01", }, { "name":"02", }, ] } ] }, { "name":"Name2", "id":47, "sites":[ { "name":"Name22", "id":106, "items":[ { "name":"03", }, { "name":"04", }, ] } ] } ]; const deepFilter = (items, value) => items.reduce((arr, cur) => { if (cur.name.includes(value)) arr.push(cur); else if (cur.hasOwnProperty('sites')) { const subItems = deepFilter(cur.subitems, value); if (subItems.length) { cur.subitems = subItems; arr.push(cur); } } else if (cur.hasOwnProperty('items')) { const subSubItems = deepFilter(cur.subsubitems, value); if (subSubItems.length) { cur.subsubitems = subSubItems; arr.push(cur); } } return arr; }, []); console.log(deepFilter(items, '02'));
Porque su valor en cur.subitems
no es una matriz.
puede arreglarlo fácilmente agregando && cur.subitems
como este:
else if (cur.hasOwnProperty('sites') && cur.subitems) {
está utilizando recursividad en su función, por lo que debe verificar los valores en consecuencia.