foursquare api返回以下内容,位于data.response.venue.hours,场地开放时间为:
hours: {
status: "Closed until Noon",
isOpen: false
timeframes: [
{
days: "Mon–Wed",
open: [
{
renderedTime: "Noon–11:00 PM"
}
],
segments: [ ]
},
{
days: "Thu",
includesToday: true,
open: [
{
renderedTime: "Noon–Midnight"
}
]
segments: [ ]
},
{
days: "Fri–Sat",
open: [
{
renderedTime: "11:00 AM–1:00 AM"
}
]
segments: [ ]
},
{
days: "Sun",
open: [
{
renderedTime: "Noon–10:30 PM"
}
]
segments: [ ]
},
]
}
一组天数因场地而异,即有些可能有周一,周三,周日,太阳或其他变化,而不是上述。
我希望对这些信息进行排序,以便我可以返回个别日期的开放时间,即自行调用星期一。我的javascript知识不是很好,所以从哪里开始会很好。
感谢您的帮助。
答案 0 :(得分:1)
为了获得场地时间,您可以使用场地/ VENUE_ID /小时终点,它具有更加机器友好的结果
hours: {
timeframes: [
{
days: [
1
2
3
4
5
6
7
],
includesToday: true,
open: [
{
start: "0600",
end: "2000"
}
],
segments: [ ]
}
]
}
这是一个简化的案例,其中所有7天都具有相同的开放段,但在其他情况下,您应该能够遍历时间帧并获得每天的开放阵列。
var Mon;
if (timeframes[j].days.indexOf(i) != -1) {
Mon = timeframes[j].open;
}
答案 1 :(得分:0)
我将从一个映射对象开始,描述哪些天与特定的开放时间匹配:
var diff = {
mon: 'Mon–Wed',
tue: 'Mon–Wed',
wed: 'Mon–Wed',
thu: 'Thu',
fri: 'Fri-Sat',
sat: 'Fri-Sat'
};
然后,我将使用filter
而不是对数据进行排序,以使用映射对象从数据中提取相关结果:
function getOpeningTimes(day) {
var arr = hours.timeframes.filter(function (el) {
// return the match where the value of the property
// in the mapping object that matches the search equals the
// days property in the current object in the data.
return diff[day] === el.days;
});
return arr[0].open[0].renderedTime;
}
console.log(getOpeningTimes('mon')); // Noon–11:00 PM