@@ -12,6 +12,7 @@ import {
1212 toggleElement ,
1313 withoutIndex ,
1414 makeNumberCompareFn ,
15+ makeDateCompareFn ,
1516} from './array' ;
1617import { Maybe } from './types' ;
1718
@@ -283,6 +284,28 @@ describe('makeNumberCompareFn', () => {
283284 } ) ;
284285} ) ;
285286
287+ describe ( 'makeDateCompareFn' , ( ) => {
288+ it ( 'sorts objects by date property' , ( ) => {
289+ const arr = [
290+ { name : 'b' , date : new Date ( '2022-01-02' ) } ,
291+ { name : 'a' , date : new Date ( '2022-01-01' ) } ,
292+ { name : 'c' , date : new Date ( '2022-01-03' ) } ,
293+ ] ;
294+ const sorted = arr . sort ( makeDateCompareFn ( ( x ) => x . date ) ) ;
295+ expect ( sorted . map ( ( x ) => x . name ) ) . toEqual ( [ 'a' , 'b' , 'c' ] ) ;
296+ } ) ;
297+
298+ it ( 'handles null/undefined dates' , ( ) => {
299+ const arr = [
300+ { name : 'a' , date : undefined } ,
301+ { name : 'b' , date : new Date ( '2022-01-01' ) } ,
302+ { name : 'c' , date : null } ,
303+ ] ;
304+ const sorted = arr . sort ( makeDateCompareFn ( ( x ) => x . date ) ) ;
305+ expect ( sorted . map ( ( x ) => x . name ) ) . toEqual ( [ 'a' , 'c' , 'b' ] ) ;
306+ } ) ;
307+ } ) ;
308+
286309describe ( 'localeCompareStrings' , ( ) => {
287310 it ( 'sorts strings' , ( ) => {
288311 const original : Array < string > = [ 'c' , '' , 'a' , 'b' ] ;
0 commit comments