How can i get recent or closest date from an array object?

时间:2016-08-31 18:33:34

标签: javascript angularjs arrays sorting

How can i get most recent or closest date from array of object , i tried to implement sortFunction but no luck, Any idea how can i acheive this task ?

ctrl.js

 $scope.data = [{
        fileDate: Wed Aug 10 2016 10: 10: 44 GMT - 0400(Eastern Daylight Time),
        filename: 'server.log'
    }, {
        fileDate: Tue Aug 30 2016 10: 48: 16 GMT - 0400(Eastern Daylight Time),
        filename: 'server1.log'
    }, {
        fileDate: Wed Aug 31 2016 12: 14: 46 GMT - 0400(Eastern Daylight Time),
        filename: 'server3.log'
    }]

function sortFunction(a, b) {
    var dateA = new Date(a.date).getTime();
    var dateB = new Date(b.date).getTime();
    return dateA > dateB ? 1 : -1;
};
$scope.data.sort(sortFunction);
console.log('DATE ARRAY', $scope.data);

main.html

<tr ng-repeat="file in data | orderBy:sortType:sortReverse">
                <td>{{file.filename}}<label ng-show="showText">currently recording</label></td>
                <td>{{file.fileDate  |date :  "dd.MM.y"}}</td>
                <td><button type="button" class="btn btn-primary" ng-click="downloadServerFile(file.filename)">download</button></td>
            </tr>

1 个答案:

答案 0 :(得分:1)

您的JavaScript对象格式错误:日期字符串周围缺少引号。

其次,它们代表JavaScript无法解释为Dates的字符串。

以下是在将这些字符串转换为日期之前修复这些字符串的代码。然后reduce可用于查找最近的日期:

$scope.data = [{
    fileDate: 'Wed Aug 10 2016 10: 10: 44 GMT - 0400(Eastern Daylight Time)',
    filename: 'server.log'
}, {
    fileDate: 'Wed Aug 31 2016 12: 14: 46 GMT - 0400(Eastern Daylight Time)',
    filename: 'server3.log'
}, {
    fileDate: 'Tue Aug 30 2016 10: 48: 16 GMT - 0400(Eastern Daylight Time)',
    filename: 'server1.log'
}];

function dateFromString(str) {
    // Fix date string before conversion -- some spaces need to be removed:
    str = str.fileDate.replace(/([:-])\s+/g,'$1');
    return new Date(str);
}

function mostRecent(a, b) {
    return dateFromString(a) > dateFromString(b) ? a : b;
};

使用上述功能,您可以通过执行以下操作来选择最近的对象:

var lastFile = $scope.data.reduce(mostRecent);

这回答了你的问题。在您提到的评论中:&#34;我只想获取最新的日期值并使ng-show布尔值为true&#34;

为此你可以为每个项添加一个新的布尔属性,指示它是否是最后一个:

$scope.data.forEach(function (file) {
    file.mostRecent = file === lastFile;
});

然后,您可以在ng-show属性中使用该属性。

相关问题