Lo-Dash sortBy tableau de dates en format de chaîne
Je voudrais savoir pourquoi lodash ne trie un tableau de dates dans un format de chaîne par rapport à la plaine javascript sort()
. Est-il prévu un comportement ou un bug?
array = ["2014-11-11", "2014-11-12", null, "2014-11-01", null, null, "2014-11-05"]
_.sortBy(array);
//["2014-11-11", "2014-11-12", null, "2014-11-01", null, null, "2014-11-05"]
_.sortBy(array, function(value) {return new Date(value);});
//[null, null, null, "2014-11-01", "2014-11-05", "2014-11-11", "2014-11-12"]
array.sort()
//["2014-11-01", "2014-11-05", "2014-11-11", "2014-11-12", null, null, null]
Version utilisée: Lo-Dash v2.4.1 – Moderne à construire.
source d'informationauteur peresleguine
Vous devez vous connecter pour publier un commentaire.
Si vous jetez un oeil à lodash code, vous pouvez voir comment il est mis en œuvre. Fonction
_.sortBy
à l'intérieur utilise natifArray.prototype.sort
(voir source). Mais la racine n'est pas là. Plus intéressante est la fonctioncompareAscending
qui est passé comme un rappel natifsort
(source). Donc en quelques mots votre_.sortBy(array, function(value) {return new Date(value);});
est converti à:
Alors pourquoi
null
s sont dans le début? Parce quenew Date(null)
retourneThu Jan 01 1970 01:00:00
qui est moins que toute autre date dans votre tableau.Qu'en natif
sort
? Selon spec (voir ici) L'ordre de tri par défaut est, selon la chaîne de points de code Unicode. Si le simple nativesort
convertit les éléments de chaînes et compare les chaînes de caractères. Donc, natif de tri est qch comme:Dès que 'null' chaîne de caractères est toujours "plus" que de la date de chaîne (comme '2014-11-11') -
null
s sera dans la queue de la matrice de résultats.