【问题标题】:Inner join with linqJS使用 linqJS 进行内部连接
【发布时间】:2014-03-26 19:52:44
【问题描述】:

我创建了一个 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")

【问题讨论】:

    标签: linq linq.js


    【解决方案1】:

    这是我将如何编写内部连接:

    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();
    

    在这里,我使用了更紧凑的语法来定义 lambda。基本上 lambdas 通常最多有 4 个参数。因此,您可以通过在标识符中添加额外的$ 来引用第 n 个参数。所以$指的是第一个参数,$$是第二个,以此类推

    连接的参数与您在 LINQ 中进行的调用完全相同。第一个参数是内部集合,然后是外部选择器、内部选择器和结果选择器。

    由于外部集合是日期,您可以访问相应的项目及其属性。既然我们想得到调用date.getDay()的结果,你只需在对象(第一个参数)上调用getDay()即可。

    【讨论】:

    • 再次感谢,现在我有足够的时间开始做更多的 linqjs :)
    猜你喜欢
    • 2013-11-19
    • 2014-05-31
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多