我如何从数组对象获得最近或最接近的日期

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

本文关键字:最近 最接近 日期 数组 对象      更新时间:2023-09-26

我如何从对象数组中获得最近或最接近的日期,我试图实现sortFunction但没有运气,任何想法我如何才能实现这个任务?

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>

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

其次,它们表示JavaScript不能解释为日期的字符串。

下面是在将这些字符串转换为日期之前修复它们的代码。然后可以使用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);

这回答了你的问题。在评论中你提到:"我只是想获得最近的日期值,并使ng-show布尔值为真"

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

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

你可以在你的ng-show属性中使用这个属性。