web-dev-qa-db-ja.com

日付で日付フィールドを持つオブジェクトの配列を並べ替える

次のオブジェクトの配列を指定し、日付フィールドの昇順で並べ替える必要があります。

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()を使用して日付プロパティを変換しようとしましたが、違いはありませんでした。

ありがとう。

19
wonder95

本当に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);
42
Punit

日付値は文字列なので、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>
7
Dekel

両方の値を日付オブジェクトに変換し、それらの値を比較することにより、標準の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);
4

単に_.sortBy({yourCollection}, {the field name});と書く

lodashはこれが日付であると自動的に判断し、魔法のように機能します!

驚くばかり!

1
oded