javascript - 使用 reduce 和 Object.values 获取属性的第一个实例

标签 javascript object

我正在减少此预测,以便为每个日期返回一个结果。

除了选择每个日期的最后一个实异常(exception),我的 getForecastForDay 函数可以正常工作。这只是有问题的,因为每个日期集中的最后一个实例具有相同的 temp_min 和 temp_max。

所以我需要获取每个日期的第一个实例而不是最后一个。我试过了,但我不明白。如何从 reduce 中选择每个日期的第一个实例?

注意:这是我的预测结果的修改版本。在此示例中,日期属性和一些其他属性上的时间已被删除。

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(resultsDateMod.reduce((acc,cur)=> Object.assign(acc,{
[cur.date]:cur} ),{}))

const threeDayForecast = getforecastForDay.slice(0,3);
threeDayForecast

我这里有一个 repl 中的代码: https://repl.it/@portabletomb/FittingRoyalblueParameter

最佳答案

首先检查累加器是否具有 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);

关于javascript - 使用 reduce 和 Object.values 获取属性的第一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50519046/

相关文章:

javascript - 错误 : Can't set headers after they are sent - Node. js

php - Symfony 4 - 类的对象无法转换为字符串

javascript - 如何覆盖数组中的对象属性?

python - 绑定(bind)和未绑定(bind)方法对象的 id() --- 有时不同对象相同,有时相同对象不同

javascript - 单击时将 2 个图像更改为一个文本

javascript - 我怎样才能使 textarea 使用 chrome 应用程序窗口动态调整大小?

oop - "No appropriate method"使用类定义对象调用新函数时产生错误

javascript - 遍历对象时更新状态值

javascript - 通过 JavaScript 使用 Canvas,如何使圆圈移动到我单击它的位置?

javascript - 圆周上的点