Knockout js sort函数只对数组中的2个项进行排序

时间:2017-11-29 12:47:57

标签: javascript sorting knockout.js

我在网上搜索了我的问题,但似乎我无法使其发挥作用。

以下是列表中的任何项目(解析后的JSon):

    actualDate: "2017-11-25T00:00:00.000Z"
    expectedDate: "2017-11-17T00:00:00.000Z"
    id: 2
    initialDate: "2017-11-17T00:00:00.000Z"
    isDone: false
    markerTitle: "Test"
    markerTypeId: 1
    projectId: 11

这是我的排序功能:

    self.listOfMarkers(self.listOfMarkers().sort(function (m1, m2)
    {
        var d1 = (m1.actualDate === null ? (m1.expectedDate === null ? 
        m1.initialDate : m1.expectedDate) : m1.actualDate);
        var d2 = (m2.actualDate === null ? (m2.expectedDate === null ? 
        m2.initialDate : m2.expectedDate) : m2.actualDate);

        return d1 < d2 ? -1 : 1;
    }));

此函数在我更新项目的callBack函数中执行。 我设法在我的API端在C#中对它进行排序,但在正面它只排序2个项目。

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我会回答自己,因为我在上面的评论中在user3297291的帮助下找到了解决方案。

将排序功能更改为此解决了问题:

    self.listOfMarkers(self.listOfMarkers().sort(function (m1, m2) {
        m1 = m1.actualDate || m1.expected || m1.initialDate;
        m2 = m2.actualDate || m2.expected || m2.initialDate;

        return m1 > m2 ? 1 : m1 < m2 ? -1 : 0;
    }));

我认为使用中间体变量或者我得到正确日期的方式就是问题。