したがって、テーブルに日付と空の文字列がある次のユースケースがあります。
問題は、ソートが期待どおりに機能しないことです。通常、文字列では、ソートの上部または下部に空の文字列が配置されます。
しかし、日付でそれはそれらを間に押し込みます。
json = ['01-01-2018', '', '04-03-2018', '03-03-2018', '', '04-03-2018', '03-03-2018'];
this.json.sort((obj1: string, obj2: string) => {
if (new Date(obj1) > new Date(obj2)) { return 1; }
if (new Date(obj1) < new Date(obj2)) { return -1; }
return 0;
});
これにより、次のようになり01-01-2018,,03-03-2018,04-03-2018,,03-03-2018,04-03-2018
ます。
これがその単純なスタックブリッツです:
私はそれを数に分類しようとしました。しかし、それでも空の文字列の問題は残ります。any1にはこれを解決する方法がありますか?
値が日付/時刻タイプに変換可能かどうかを確認し、変換できない場合は-1または1(配置する場所に応じて)を返す必要があります。
json = ['01-01-2018', '', '04-03-2018', '03-03-2018', '', '04-03-2018', '03-03-2018'];
this.json.sort((obj1: string, obj2: string) => {
if (obj1 === obj2) { return 0; } // if they are the same then no need to convert these instances to Date types later, just return 0
if (!obj1) { return 1; } // thruthy check
if (!obj2) { return -1; } // thruthy check
if (new Date(obj1) > new Date(obj2)) { return 1; }
if (new Date(obj1) < new Date(obj2)) { return -1; }
return 0;
});
// Initial array
'01-01-2018', '', '', '', '04-03-2018', '03-03-2018', '', '04-03-2018', '03-03-2018'
// Sorted array
'01-01-2018', '03-03-2018', '03-03-2018', '04-03-2018', '04-03-2018', '', '', '', ''
ちなみに、javascriptのではなくmomentjsをお勧めしDate
ます。これははるかに強力であり、渡した値にフォーマット文字列を含めることができるため、文字列は正しく解析されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加