香草 Javascript 过滤器功能在一行中完美运行,但在其他行中根本不起作用

Vanilla Javascript filter function works perfect in one line, but not work at all for other

我正在尝试使用 JavaScript.

过滤 JSON 文件
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
});

虽然进入 city 变量的过滤器工作完美,但进入 admin 变量的过滤器 是第一个的复制粘贴,return 错误:

Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'toLowerCase')

即使我删除了 toLowerCase 函数,我也会得到同样的错误,但是(读取 'includes')

这是 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
 },
]

这仅仅意味着 admin_name 不存在,或者对于数组中的至少一个对象是 null/undefined

为了支持这一点,您可以像这样使用 optional chaining

admin = cities.filter(eb => {
    return eb.admin_name?.toLowerCase()?.includes(searcher.value.toLowerCase()); //example value Beograd
});

附带说明一下,awaitPromise 值只是 returns 那个值,所以它对你的情况毫无用处。