我正在减少此预测,以便为每个日期返回单个结果。
我的getForecastForDay函数有效,除了它选择每个日期的最后一个实例。这只是有问题的,因为每个日期集中的最后一个实例具有相同的temp_min和temp_max。
所以我需要抓住每个日期的第一个实例而不是最后一个。我试过,但我没有得到它。如何从reduce中选择每个日期的第一个实例?
注意:这是我的预测结果的修改版本。在此示例中,日期属性和其他一些属性的时间已被删除。
ApplicationData.Current.LocalFolder
我在这里有一个代码: https://repl.it/@portabletomb/FittingRoyalblueParameter
答案 0 :(得分:2)
检查累加器是否首先具有cur.date
属性,如果缺少日期则仅assign
- 这样,您跳过重复,而不是重复覆盖原件。
const forecast=[{date:"2018-05-24",temp_min:49.87,temp_max:57.1},{date:"2018-05-24",temp_min:49.08,temp_max:53.9},{date:"2018-05-24",temp_min:54.52,temp_max:56.93},{date:"2018-05-24",temp_min:61.8,temp_max:61.8},{date:"2018-05-24",temp_min:66.58,temp_max:66.58},{date:"2018-05-25",temp_min:68.64,temp_max:68.64},{date:"2018-05-25",temp_min:66.33,temp_max:66.33},{date:"2018-05-25",temp_min:62.41,temp_max:62.41},{date:"2018-05-25",temp_min:58.97,temp_max:58.97},{date:"2018-05-25",temp_min:55.15,temp_max:55.15},{date:"2018-05-25",temp_min:56.24,temp_max:56.24},{date:"2018-05-25",temp_min:59.29,temp_max:59.29},{date:"2018-05-25",temp_min:65.89,temp_max:65.89},{date:"2018-05-26",temp_min:67.96,temp_max:67.96},{date:"2018-05-26",temp_min:65.05,temp_max:65.05},{date:"2018-05-26",temp_min:59.42,temp_max:59.42},{date:"2018-05-26",temp_min:55.52,temp_max:55.52},{date:"2018-05-26",temp_min:52.17,temp_max:52.17},{date:"2018-05-26",temp_min:53.06,temp_max:53.06},{date:"2018-05-26",temp_min:58.72,temp_max:58.72},{date:"2018-05-26",temp_min:63.51,temp_max:63.51}];
const getForecastForDay =
Object.values(forecast.reduce((acc,cur)=> (
acc[cur.date]
? acc
: { ...acc, [cur.date]: cur }
), {}));
const threeDayForecast = getForecastForDay.slice(0,3);
console.log(threeDayForecast);
答案 1 :(得分:1)
在添加下一个对象之前,请检查结果中是否已存在日期:
forecast.reduce((results, next) => {
if (!results[next.date]) {
results[next.date] = next;
}
return results;
}, {});
“缩小的”:
forecast.reduce((res, next) => res[next.date] ? res : (res[next.date] = next, res), {});
答案 2 :(得分:1)
假设订购了数据,那么您需要做的就是忽略具有相同日期的任何其他记录,即
const getForecastForDay = Object.values(
forecast.reduce((acc, cur) => {
if (!acc[cur.date]) {
acc[cur.date] = cur;
}
return acc;
}, {})
)