JavaScript – Lo-Dash sortBy数组的字符串格式的日期

前端之家收集整理的这篇文章主要介绍了JavaScript – Lo-Dash sortBy数组的字符串格式的日期前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道为什么lodash不排序字符串格式的日期数组与纯 JavaScript排序()相比.是预期的行为还是一个错误
array = ["2014-11-11","2014-11-12",null,"2014-11-01","2014-11-05"]

_.sortBy(array);
// ["2014-11-11","2014-11-05"]

_.sortBy(array,function(value) {return new Date(value);});
// [null,"2014-11-05","2014-11-11","2014-11-12"]

array.sort()
// ["2014-11-01",null]

使用的版本:Lo-Dash v2.4.1 – 现代版.

解决方法

如果你看看放弃代码,你可能会看到它的实现.函数_.sortBy里面使用本机Array.prototype.sort(见 source).但根本不在那里.更有意思的是作为回调传递给native sort( source)的函数compareAscending.所以用几句话你的

_.sortBy(array,function(value){return new Date(value);});

转换为:

array.sort(function(a,b) {
    var aa = new Date(a),bb = new Date(b);

    if (aa !== bb) {
        if (aa > bb) { return 1; }
        if (aa < bb) { return -1; }
    }
    return aa - bb;
})

那么为什么null在开始?因为新的Date(null)返回到1970年01月01日01:00:00,它比数组中的任何其他日期少.

本土排序怎么样?根据spec(参见here)默认排序顺序是根据字符串Unicode代码点.如果简单 – 本机排序将项目转换为字符串并比较字符串.所以本地排序是如此:

_.sortBy(array,function(value) {return value + ''; });

一旦’null’字符串始终比日期字符串“更大”(如“2014-11-11”) – null将位于结果数组的尾部.

原文链接:https://www.f2er.com/js/151522.html

猜你在找的JavaScript相关文章