JavaScriptオブジェクトの配列があります。私の配列は次のように定義されています:
var myObjects = [
{ id: '1', username: 'bill.jones', active: true, createdon: '03/29/2014' },
{ id: '2', username: 'woohoo', active: true, createdon: '03/28/2014' },
{ id: '3', username: 'someuser', active: true, createdon: '03/30/2014' }
];
この配列は実際に動的に設定されます。それでも、私は作成された値で昇順で結果をソートする必要があります。そのために、lodashを使用しようとしています。 createdon値は日付を表します。現在、私は次を試しています:
// ORDER BY createdOn
myObjects.sort(function (a, b) {
var date1 = new Date(a['createdon']);
var date2 = new Date(b['createdon']);
return date1 < date2;
});
_.forEach(myObjects, function(result) {
console.log(result);
});
残念ながら、この関数を実行した後でもmyObjectsはソートされていません。私は何を間違えていますか?
ありがとうございました!
Lodash docを調べたところ、おそらく sortBy
を試すことができました
それを試してください: http://jsfiddle.net/3Wza8/
var myObjects = [
{ id: '1', username: 'bill.jones', active: true, createdon: new Date('03/29/2014') },
{ id: '2', username: 'woohoo', active: true, createdon: new Date('03/28/2014') },
{ id: '3', username: 'someuser', active: true, createdon: new Date('03/30/2014') }
];
myObjects = _.sortBy(myObjects, 'createdon');
_.forEach(myObjects, function (result) {
console.log(result);
});
編集:Cookie Monsterが指摘したように、createdon
フィールドは文字列ではなく日付であることが重要です。
問題は、sort
が-1、0、または1を返す関数を期待していることです。関数は0と1のみを返します。
このわずかな変更により修正されます。
myObjects.sort(function (a, b) {
var date1 = new Date(a['createdon']);
var date2 = new Date(b['createdon']);
return date1 - date2;
});