[5.5] Maintain original order of collection items with equal values when using sortBy() #21270
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
(Revisits #21214, which was reverted in #21255)
This PR implements stable sort for
sortBy()
, as discussed in #21214, but approaches it another way that doesn't break when passed sort options likeSORT_STRING
,SORT_NUMBER',
SORT_NATURAL`, etc.The result:
sortBy()
will now preserve the original order of collection items which have identical values, and will work correctly with all sort options.Fixes #21253
Coincidentally, the instability of
sortBy()
also seems to be the cause of issues arising from the recent addition of route fallbacks, which ended up re-sorting routes in an unpredictable manner. So this PR should have the side-effect of fixing #21257 and #21258.