2016-08-31 10 views
1

どのように私はオブジェクトの配列から最新の、または最も近い日付を得ることができます、私は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); 

<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> 
+2

これはあなたを助けてくれることを望みます: - http://stackoverflow.com/a/10124053/2437590 –

+2

'fileDate'がプロパティの名前であれば、'(a.date) 'と'(b。日付) ''あなたの 'sortFunction'で? –

+0

複数のオブジェクトの場合にこのソート関数をどのように使用するのかよくわかりません – hussain

答えて

1

あなたのJavaScriptオブジェクトが奇形さmain.htmlと:引用符は、日付文字列の周りに表示されません。

第2に、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ブール値をtrueにしたいだけです"

はそのためにあなたはそれが最後のものであるかどうかを示す、各項目に新しいブール型プロパティを追加することができます。

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

次に、あなたのng-show属性にそのプロパティを使用することができます。

+0

popは最後のアイテムを削除します。また、ng-repeatにすべてのリストを表示したいのですが、他の解決方法はありますか? – hussain

+0

はい、 'pop()'の前に 'slice(-1)'を付けます。 - 答えが更新されました。そうでなければ、反対方向にソートし、 '$ scope.data [0]'を取る。 – trincot

+0

何が起きるのですか?最後の項目を並べ替えるとUIの日付列を並べ替えることができます。私の最終目標は最近の日付値に文字列を追加するためです。ユイ側。 'obj'と' $ scope.data'の日付が一致する場合は 'showText'変数をtrueにしたい.Htmlを追加した場合 – hussain

関連する問題