Estoy tratando de filtrar el archivo JSON con JavaScript simple.
city = await cities.filter(ea => { return ea.city.toLowerCase().includes(searcher.value.toLowerCase()); //example value Belgrade }); admin = await cities.filter(eb => { return eb.admin_name.toLowerCase().includes(searcher.value.toLowerCase()); //example value Beograd });
Si bien el filtro que va a la variable de la ciudad funciona perfectamente, uno que va a la variable de administración, que es Copiar y Pegar el primero, devuelve el error:
No capturado (en promesa) TypeError: no se pueden leer las propiedades de undefined (leyendo 'toLowerCase')
e incluso si elimino la función toLowerCase obtengo el mismo error pero (leyendo 'incluye')
esta es la estructura del archivo JSON:
[ { "city": "Tokyo", "city_ascii": "Tokyo", "lat": 35.6839, "lng": 139.7744, "country": "Japan", "iso2": "JP", "iso3": "JPN", "admin_name": "Tōkyō", "capital": "primary", "population": 39105000, "id": 1392685764 }, ]
Eso solo significa que admin_name
no existe, o es null
/ undefined
para al menos un objeto de su matriz.
Para respaldar esto, podría usar un encadenamiento opcional como este:
admin = cities.filter(eb => { return eb.admin_name?.toLowerCase()?.includes(searcher.value.toLowerCase()); //example value Beograd });
Como nota al margen, await
un valor que no sea Promise
solo devuelve ese valor, por lo que es inútil en su caso.