Created
May 3, 2021 09:14
-
-
Save gordey4doronin/51e3940d714c17b3bb6099ae9d0dd330 to your computer and use it in GitHub Desktop.
This code snippet aims to demonstrate the difference between Node 10 and Node 12 Array.sort implementations.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This code snippet aims to demonstrate the difference between Node 10 and Node 12 Array.sort implementations. | |
// The result is guaranteed to be sorted. | |
// However, the order is not guaranteed. | |
// For better understanding see v8 array-sort blog post https://v8.dev/blog/array-sort. | |
// Related discussion in node repo https://github.com/nodejs/node/issues/24294. | |
// Below we have multiple members with the same `num` values. | |
// The `title` properties are here for visibility, they're not used for sorting. | |
// In Node 12 we receive known pangrams in the sorted result. | |
// "The quick brown fox jumps over the lazy dog" | |
// "The five boxing wizards jump quickly" | |
// While in Node 10 the order is slightly different for the elements with equal `id` values. | |
var arr = [ | |
{ num: 10, title: 'quickly' }, | |
{ num: 9, title: 'wizards' }, | |
{ num: 9, title: 'jump' }, | |
{ num: 8, title: 'dog' }, | |
{ num: 8, title: 'The' }, | |
{ num: 8, title: 'five' }, | |
{ num: 8, title: 'boxing' }, | |
{ num: 7, title: 'lazy' }, | |
{ num: 6, title: 'the' }, | |
{ num: 5, title: 'over' }, | |
{ num: 4, title: 'jumps' }, | |
{ num: 3, title: 'fox' }, | |
{ num: 2, title: 'brown' }, | |
{ num: 1, title: 'The' }, | |
{ num: 1, title: 'quick' } | |
] | |
// Now using node v12.21.0 | |
arr.sort((a, b) => a.num - b.num) | |
// [ | |
// { num: 1, title: 'The' }, | |
// { num: 1, title: 'quick' }, | |
// { num: 2, title: 'brown' }, | |
// { num: 3, title: 'fox' }, | |
// { num: 4, title: 'jumps' }, | |
// { num: 5, title: 'over' }, | |
// { num: 6, title: 'the' }, | |
// { num: 7, title: 'lazy' }, | |
// { num: 8, title: 'dog' }, | |
// { num: 8, title: 'The' }, | |
// { num: 8, title: 'five' }, | |
// { num: 8, title: 'boxing' }, | |
// { num: 9, title: 'wizards' }, | |
// { num: 9, title: 'jump' }, | |
// { num: 10, title: 'quickly' } | |
// ] | |
// Now using node v10.24.0 | |
arr.sort((a, b) => a.num - b.num) | |
// [ { num: 1, title: 'quick' }, | |
// { num: 1, title: 'The' }, | |
// { num: 2, title: 'brown' }, | |
// { num: 3, title: 'fox' }, | |
// { num: 4, title: 'jumps' }, | |
// { num: 5, title: 'over' }, | |
// { num: 6, title: 'the' }, | |
// { num: 7, title: 'lazy' }, | |
// { num: 8, title: 'boxing' }, | |
// { num: 8, title: 'five' }, | |
// { num: 8, title: 'The' }, | |
// { num: 8, title: 'dog' }, | |
// { num: 9, title: 'wizards' }, | |
// { num: 9, title: 'jump' }, | |
// { num: 10, title: 'quickly' } ] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment