我正在为客户端构建一个自定义日历类事物,它不会接受开箱即用的行为,并且我在导航如何将我需要的数组拼接在一起时遇到了一些问题正确显示日期。使用日期复杂的数组操作
一些背景:这是一个基于SharePoint的解决方案,用户在一个列表中输入旅行日期和位置,在另一个列表中输入默认位置。输出需要四周的时间跨度,以显示用户在任何特定日期的位置,无论是这些旅行地点之一还是默认(家庭办公室)地点。
所以我做了一个REST调用旅行列表([whereabouts]),一个默认位置列表([默认值]),并在代码中做一些其他的东西来建立从今天到今天的日期数组+28([allDates])。
我试过一堆嵌套for循环,它并没有真正返回正确的东西。但我需要基本上说:在[allDates]中的每一天,那个日期的[下落]中是否有一个事件?如果是这样,然后推事件标题。如果不是,则从[默认值]推入默认位置。
我完全迷失在这里,乡亲们,任何帮助都超级赞赏。
编辑
在回答拉杰什,[下落]是活动的阵列具有以下属性的对象:
- 日期(UTC字符串)
- 事件长度(字符串)
- 团队成员(字符串)
- 标题(字符串)
[allDates]是从今天到今天+ 28天的日期字符串数组。
[默认值]为对象的数组具有以下属性:
- 团队成员(串)
- 位置(串)
和我有什么例子/正在尝试:
(完成REST调用并返回其数据后)
function initCal(){
//Groups returned whereabouts data into arrays per team member name.
var grouped = _(whereabouts).groupBy(function(o){
return o.Team_x0020_Member.Title;
});
//Reduces the above to something a little more simple for me to work with.
grouped = _.pairs(grouped)
//Full disclosure, this is going into a google charts data table.
var tbl = new google.visualization.DataTable();
//Building the allDates array and adding in day names.
for(var i=0;i<14;i++){
var weekday = new Array(7);
weekday[0]= "Sunday";
weekday[1] = "Monday";
weekday[2] = "Tuesday";
weekday[3] = "Wednesday";
weekday[4] = "Thursday";
weekday[5] = "Friday";
weekday[6] = "Saturday";
var day = today.addDays(i);
var d = weekday[day.getDay()];
var n = day.toLocaleDateString();
tbl.addColumn('string',n);
}
//I have to do some manipulation of the object google creates. It looks kind of weird, but the output is that allDates array.
var allDates = [];
var colsArr = tbl.Kf;
for(var i=0;i<colsArr.length;i++){
if(colsArr[i].label != ''){
allDates.push(colsArr[i].label);
}
}
//This is ultimately where the results will go.
var rows = [];
//Cycle through grouped, get the current team member, then go manipulate all these arrays using getEvents.
for(var i=0;i<grouped.length;i++){
var thisTM = grouped[i][0];
var whereabouts = grouped[i][1];
rows.push([thisTM,getEvents(whereabouts,defaults,allDates)]);
}
//This is just where the data table goes.
var table = new google.visualization.Table(document.getElementById('whereabouts'));
table.draw(tbl, {width: '100%', height: '100%'});
}
//Just needed something to get the day names. Not important, left here because laziness.
Date.prototype.addDays = function(days){
var dat = new Date(this.valueOf());
dat.setDate(dat.getDate() + days);
return dat;
}
function getEvents(whereabouts,defaults,allDates){
//Figure I'll put the finished results here and return this array.
var events = [];
//Empty array for formatted dates.
var evDate = [];
//Format the whereabouts date strings into locale date strings so I can do comparisons against the allDates date strings.
for(var i=0;i<whereabouts.length;i++){
var formatD = new Date(whereabouts[i].Date).toLocaleDateString();
evDate.push(formatD);
}
for(var i=0;i<allDates.length;i++){
for(var j=0;j<evDate.length;j++){
if (evDate[j] === allDates[i]){
events.push(whereabouts[j].Title);
} else {
events.push(defaults.Title);
}
}
}
}
编辑2 另一个环境。应该返回到initCal的东西应该是一个长度与allDays完全相同但包含事件标题(如果有的话)或默认位置(如果当天没有事件)的数组。
这有道理吗?再次感谢您的帮助和反馈。
你可以分享这些变量的样子吗? – Rajesh
不是我的专业语言,但如果你想在这里得到任何人的帮助,最好提供你已经试过的任何代码。 –
当然,所有好的反馈。我已经添加了数组的说明以及我正在使用的自我记录代码。 – ChrisPEditor