OpenWeather API数据按日期分组并筛选符合风速要求日期的实现方法
解决方案
核心调整点是翻转了过滤和分组的执行顺序,改为先全量按日期分组,再过滤掉没有达标风速记录的分组,既能保留符合要求日期的全量时间戳,又能剔除全天无达标风速的日期。
调整后的实现代码如下:
const groupByDay = () => { // 全量按日期分组,不提前过滤风速不达标条目 const allDayGroups = weatherList.reduce((entryMap, entry) => { const selector = unix(entry.dt).format("dddd MM/DD"); return entryMap.set(selector, [...(entryMap.get(selector) || []), entry]); }, new Map()); // 仅保留当日至少有1条风速达标记录的分组 const validGroups = new Map(); for (const [dateKey, entries] of allDayGroups) { const hasQualifiedWind = entries.some(item => item.wind.speed >= MIN_WIND_SPEED); if (hasQualifiedWind) { validGroups.set(dateKey, entries); } } return validGroups; };
如果偏好精简写法,可以用以下逻辑完全一致的版本:
const groupByDay = () => new Map( Array.from( weatherList.reduce((entryMap, entry) => { const selector = unix(entry.dt).format("dddd MM/DD"); return entryMap.set(selector, [...(entryMap.get(selector) || []), entry]); }, new Map()) ).filter(([_, entries]) => entries.some(e => e.wind.speed >= MIN_WIND_SPEED)) );
内容的提问来源于stack exchange,提问作者Son Le
相关产品推荐
相关产品推荐

