Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用天气API并按日期排序_Javascript_Reactjs_Api - Fatal编程技术网

Javascript 使用天气API并按日期排序

Javascript 使用天气API并按日期排序,javascript,reactjs,api,Javascript,Reactjs,Api,我尝试按日期筛选数组,然后每天制作一个组件。对我来说,最大的障碍是日期是以UTC显示的,我不知道如何将其转换为可使用的格式来循环。除非有人提出更有效的方法,否则我们的目标是能够对日期数据进行分组,调用该数组(即firstDay[0]),并循环遍历这些数组以找到当天的最高温度、平均湿度等。但我认为第一步是按日期排序。即五天[0]。最大温度 JSON var firstDay=[]; var firstDayVar; 对于(i=0;iresponse.json())。然后(data=>{ cons

我尝试按日期筛选数组,然后每天制作一个组件。对我来说,最大的障碍是日期是以UTC显示的,我不知道如何将其转换为可使用的格式来循环。除非有人提出更有效的方法,否则我们的目标是能够对日期数据进行分组,调用该数组(即firstDay[0]),并循环遍历这些数组以找到当天的最高温度、平均湿度等。但我认为第一步是按日期排序。即五天[0]。最大温度

JSON

var firstDay=[];
var firstDayVar;
对于(i=0;i
这是我根据日期对数据进行分组的方式。现在您可以基于日期循环它们,每个日期都有一个api列表属性中的原始对象数组

api为您提供了[DATE]\u[TIME]数组项,我们的目标是在[DATE]字典中对相同的日期进行分组,其中每个单独的日期将包含一个原始项列表(针对该特定日期)

[D1.T1、D1.T2、D2.T1、D3.T1、D3.T2、D3.T3]//项目的原始数组

{D1:[D1.T1,D1.T2],D2:[D2.T1],D3:[D3.T1,D3.T2,D3.T3]}//对象按日期对项目进行分组

如果仔细观察,您的想法是保持数据安全,这样您的原始结构就安全了。现在,循环分组数据的键,就可以访问单个日期的所有项

fetch('https://api.openweathermap.org/data/2.5/forecast?q=Austin,USA&appid=583f803dfc6a7f2f96ff9957c330c2b0&units=imperial')。然后(response=>response.json())。然后(data=>{
const groupedData=data.list.reduce((天,行)=>{
const date=row.dt_txt.split(“”)[0];
天[日期]=[…(天[日期]?天[日期]:[]),行];
返程天数;
}, {});
for(让Object.keys的日期(groupedData)){
console.log('日期:',日期);
//当前日期->日期
//此日期的原始项目数组->groupedData[日期]
console.log('RowCount:',groupedData[date].length);
log('MaxTemp:',getMax(groupedData[date],'temp_max');
log('MinTemp:',getMin(groupedData[date],'temp_min');
log('max湿度:',getMax(groupedData[date],'湿度');
console.log('\n\n');
}
});
函数getMax(arr、attr){
返回Math.max.apply(Math,arr.map(item=>item.main[attr]);
}
函数getMin(arr、attr){
返回Math.min.apply(Math,arr.map(item=>item.main[attr]);

}
这是我根据日期对数据进行分组的方式。现在您可以基于日期循环它们,每个日期都有一个api列表属性中的原始对象数组

api为您提供了[DATE]\u[TIME]数组项,我们的目标是在[DATE]字典中对相同的日期进行分组,其中每个单独的日期将包含一个原始项列表(针对该特定日期)

[D1.T1、D1.T2、D2.T1、D3.T1、D3.T2、D3.T3]//项目的原始数组

{D1:[D1.T1,D1.T2],D2:[D2.T1],D3:[D3.T1,D3.T2,D3.T3]}//对象按日期对项目进行分组

如果仔细观察,您的想法是保持数据安全,这样您的原始结构就安全了。现在,循环分组数据的键,就可以访问单个日期的所有项

fetch('https://api.openweathermap.org/data/2.5/forecast?q=Austin,USA&appid=583f803dfc6a7f2f96ff9957c330c2b0&units=imperial')。然后(response=>response.json())。然后(data=>{
const groupedData=data.list.reduce((天,行)=>{
const date=row.dt_txt.split(“”)[0];
天[日期]=[…(天[日期]?天[日期]:[]),行];
返程天数;
}, {});
for(让Object.keys的日期(groupedData)){
console.log('日期:',日期);
//当前日期->日期
//此日期的原始项目数组->groupedData[日期]
console.log('RowCount:',groupedData[date].length);
log('MaxTemp:',getMax(groupedData[date],'temp_max');
log('MinTemp:',getMin(groupedData[date],'temp_min');
log('max湿度:',getMax(groupedData[date],'湿度');
console.log('\n\n');
}
});
函数getMax(arr、attr){
返回Math.max.apply(Math,arr.map(item=>item.main[attr]);
}
函数getMin(arr、attr){
返回Math.min.apply(Math,arr.map(item=>item.main[attr]);

}
我不确定是否收到了您的邮件,但从外观上看,由于dt:键,天气API已按日期升序排列,您所需做的一切都已完成 是从列表中渲染组件

list.map(day => <MyAwesomeComponent 
                   maxTemp={day.main.temp_max} 
                   humidityAvg={day.main.humidity}  />)
list.map(day=>)

我不确定是否收到了您的邮件,但从外观上看,由于dt:键,天气API已按日期升序排列,您所需做的一切都已完成 是从列表中渲染组件

list.map(day => <MyAwesomeComponent 
                   maxTemp={day.main.temp_max} 
                   humidityAvg={day.main.humidity}  />)
list.map(day=>)

要获取仅包含具有特定日期字符串的对象的数组(例如“2019-09-23”),我将使用array.prototype.filter方法和String.prototype.includes方法仅返回其dt_文本包含日期字符串的对象:

(where list is the array returned from the API)

var firstDayList = list.filter(item => item.dt_txt.includes("2019-09-23"))


要获得仅包含具有特定日期字符串的对象的数组(例如“2019-09-23”),我将使用array.prototype.filter方法和String.prototype.includes方法仅返回其dt_文本包含日期字符串的对象:

(where list is the array returned from the API)

var firstDayList = list.filter(item => item.dt_txt.includes("2019-09-23"))


我想用一个功能性的应用程序