次のオブジェクトの配列を指定し、日付フィールドの昇順で並べ替える必要があります。
var myArray = [
{
name: "Joe Blow",
date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "Sam Snead",
date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "John Smith",
date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
}
];
この例では、最終結果はJohn Smith、Sam Snead、およびJoe Blowになります。
私はlodashの _。sortBy() を使用しようとしていますが、どのように使用しようとしてもソートを実行できません:
_.sortBy(myArray, function(dateObj) {
return dateObj.date;
});
または
_.sortBy(myArray, 'date');
配列を適切にソートするには、何を変更する必要がありますか? Moment.jsもあるので、必要に応じてそれを使用して日付文字列をフォーマットできます。 .unix()を使用して日付プロパティを変換しようとしましたが、違いはありませんでした。
ありがとう。
本当にlodashは必要ありません。 JavaScriptのArray.prototype.sort
方法。
比較する前に、日付文字列からDate
オブジェクトを作成する必要があります。
var myArray = [{
name: "Joe Blow",
date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
}, {
name: "Sam Snead",
date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
}, {
name: "John Smith",
date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
}];
myArray.sort(function compare(a, b) {
var dateA = new Date(a.date);
var dateB = new Date(b.date);
return dateA - dateB;
});
console.log(myArray);
日付値は文字列なので、new Date()
コンストラクターを使用してjavascript date
オブジェクトに変更する必要があります。この方法で、それらをソートできます(_.sortBy
)。
var myArray = [
{
name: "Joe Blow",
date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "Sam Snead",
date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "John Smith",
date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
}
];
myArray = _.sortBy(myArray, function(dateObj) {
return new Date(dateObj.date);
});
console.log(myArray)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>
両方の値を日付オブジェクトに変換し、それらの値を比較することにより、標準のJavaScriptを使用するソリューションを次に示します。
myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());
完全なスニペット:
var myArray = [
{
name: "Joe Blow",
date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "Sam Snead",
date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
},
{
name: "John Smith",
date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
}
];
myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());
console.log(myArray);
単に_.sortBy({yourCollection}, {the field name});
と書く
lodashはこれが日付であると自動的に判断し、魔法のように機能します!
驚くばかり!