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>
答案 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
属性中使用该属性。