私は各オブジェクトが含まれているオブジェクトの配列をソートしようとしています:
_var recent = [{id: "123",age :12,start: "10/17/13 13:07"} , {id: "13",age :62,start: "07/30/13 16:30"}];
_
日付形式は_mm/dd/yy hh:mm
_です。
日付の新しい順に並べたい。日付が同じ場合は、時間部分でソートする必要があります。
以下のsort()
関数を試しましたが、機能していません:
_recent.sort(function(a,b))
{
a = new Date(a.start);
b = new Date(b.start);
return a-b;
});
_
また、ソートのためにオブジェクトをどのように反復する必要がありますか?何かのようなもの:
_for (var i = 0; i < recent.length; i++)
{
recent[i].start.sort(function (a, b)
{
a = new Date(a.start);
b = new Date(b.start);
return a-b;
} );
}
_
配列には任意の数のオブジェクトを含めることができます。
コメントで指摘されているように、最近の定義は正しいjavascriptではありません。
しかし、日付が文字列であると仮定すると:
var recent = [
{id: 123,age :12,start: "10/17/13 13:07"},
{id: 13,age :62,start: "07/30/13 16:30"}
];
次のように並べ替えます:
recent.sort(function(a,b) {
return new Date(a.start).getTime() - new Date(b.start).getTime()
});
recent.sort(function(a,b) { return new Date(a.start).getTime() - new Date(b.start).getTime() } );
この関数を使用すると、比較するキーへのパスをたどるコンパレータを作成できます。
function createDateComparator ( path = [] , comparator = (a, b) => a.getTime() - b.getTime()) {
return (a, b) => {
let _a = a
let _b = b
for(let key of path) {
_a = _a[key]
_b = _b[key]
}
return comparator(_a, _b)
}
}
const input = (
[ { foo: new Date(2017, 0, 1) }
, { foo: new Date(2018, 0, 1) }
, { foo: new Date(2016, 0, 1) }
]
)
const result = input.sort(createDateComparator([ 'foo' ]))
console.info(result)
ES6:
recent.sort((a,b)=> new Date(b.start).getTime()-new Date(a.start).getTime());