Estoy ejecutando este código cortado en React para buscar si hay una coincidencia con la entrada del usuario. El archivo json es el siguiente:
{ "first":{ "name": "Michael Jordan", "id": "mj" "image": ".../icon.png", "tags": [ "Sportsman", "Tall", "Famous", "something", "etc" ] }, "second":{ "name": "Paul White", "id": "pw" "image": ".../icon.png", "tags": [ "Engineer", "Small", "Famous", "Another characteristic", "likes apples" "something", "etc2" ] } }y aquí está la función de búsqueda que hice para buscar a través de todos los nombres y etiquetas si hay una "persona" coincidente, y luego mostrar todas las "personas" que comparten las mismas etiquetas o nombres
const [q, setQ] = useState(""); function main_char_search(searchProp) { const tagssearch = searchProp[0].tags && Object.keys(searchProp[0].tags); return searchProp.filter( (new_items) => new_items.name.toLowerCase().indexOf(q) > -1 || tagssearch.some((tagsearch)=>new_items[tagsearch].toString().toLowerCase().indexOf(q)) > -1 ); } el truco es que la matriz que contiene las etiquetas varía en tamaño a veces.
Se supone que la entrada se parece al archivo JSON. Después de todo, es el resultado después de obtener el archivo JSON usando "buscar".
const [loadChar, setLoadChar] = useState([]); fetch('./data/fakeData.json') .then((res) => return res.json()) .then((data) => { //more code setLoadChar(all_the_characters_from_json_file); })y llamo a la función con:
<APageForCharacters inputInfo={main_char_search(loadChar)} /> Aquí están los errores que genera este código:
TypeError no puede leer propiedades de indefinido (leyendo 'etiquetas')
Uncaught (en ... promesa)
Nota: el código funciona perfectamente si trato de buscar los nombres y otros componentes individuales.
Nota 2: la variable de búsqueda de etiquetas almacena los valores de las etiquetas como su número de índice, por lo que el código es incorrecto a partir de ahí, pero todavía estoy luchando por encontrar la mejor solución con la mejor complejidad de tiempo.
Espero que no me falte ninguna información requerida.