我创建了一个dateRange,它是一个日期数组。
然后我有一系列日期数字,例如0表示星期日,1表示星期一等...
现在我想根据visibleWeekDays数组获取所有dateRange日期。
解决方案在getVisibleDateRange函数中。
但是我想用LINQ来做,因为为什么重新发明轮子......
内部或外部选择器仍然需要.day(),因为其中一个选择器是一个momentJS对象。
但要获得星期几,我需要将“.day()”放入linqJS字符串中,这不能正常工作......
linqJS的解决方案是什么?
// Arrange
var startDate = moment(new Date(2014, 1, 1));
var endDate = moment(new Date(2014, 1, 15));
var visibleWeekDays = [0,1]
// Act
var dates = dateFactory.dateRange(startDate, endDate);
var visibleDays = dateFactory.getVisibleDateRange(visibleWeekDays ,dates);
function getVisibleDateRange(visibleWeekDays, dateRange) {
var visibleDateRange = [];
for (var i = 0; i < dateRange.length; i++) {
for (var j = 0; j < visibleWeekDays.length; j++) {
var currentDate = dateRange[i];
var dayOfWeek = currentDate.day();
var visibleDayOfWeek = visibleWeekDays[j];
if (visibleDayOfWeek === dayOfWeek) {
visibleDateRange.push(currentDate);
}
}
}
return visibleDateRange;
}
var visibleDateRange = Enumerable.from(visibleWeekDays).join(dateRange,"","","outer,inner=>outer + ':' + inner")
答案 0 :(得分:0)
以下是我编写内连接的方法:
var dateRange = Enumerable.Range(1, 15).Select("new Date(2014, 1, $)");
var visibleWeekDays = Enumerable.From([0, 1]);
var visibleDateRange = dateRange.Join(visibleWeekDays,
"$.getDay()", // outer selector
"$", // inner selector
"$") // result selector (select outer value, the date)
.ToArray();
在这里,我使用了更紧凑的语法来定义lambdas。基本上,lambdas通常最多有4个参数。因此,您只需在标识符中添加其他$
即可引用第n个参数。因此$
指的是第一个参数,$$
指的是第二个参数
连接的参数与您在LINQ中进行的调用完全相同。第一个参数是内部集合,然后是外部选择器,内部选择器和结果选择器。
由于外部集合是日期,因此您可以访问相应的项目及其属性。由于我们想要获得调用date.getDay()
的结果,您只需在对象上调用getDay()
(第一个参数)。