Moment: 排序比较函数

创建于 2014-02-25  ·  6评论  ·  资料来源: moment/moment

在对矩对象列表(或具有矩属性的对象,应该是排序键)进行排序时,如果包含比较函数,那就太好了。 这样我们就可以做这样的事情:

array.sort(m.compare)

最有用的评论

由于moment#valueOf函数,比较函数是微不足道的。

var array = [
    moment(),
    moment().add(1, 'd'),
    moment().subtract(1, 'd')
];

console.log(array.map(function (m) {
    return m.format('YYYY-MM-DD')
}));
// ["2014-02-24", "2014-02-25", "2014-02-23"] 

array.sort(function (a, b) {
    return a - b;
});

console.log(array.map(function (m) {
    return m.format('YYYY-MM-DD')
}));
// ["2014-02-23", "2014-02-24", "2014-02-25"]

所有6条评论

由于moment#valueOf函数,比较函数是微不足道的。

var array = [
    moment(),
    moment().add(1, 'd'),
    moment().subtract(1, 'd')
];

console.log(array.map(function (m) {
    return m.format('YYYY-MM-DD')
}));
// ["2014-02-24", "2014-02-25", "2014-02-23"] 

array.sort(function (a, b) {
    return a - b;
});

console.log(array.map(function (m) {
    return m.format('YYYY-MM-DD')
}));
// ["2014-02-23", "2014-02-24", "2014-02-25"]

谢谢。

我明确使用moment#valueOf ,这看起来我不需要。

使用打字稿,这并不那么简单。 打字不允许你说a - b

相反,我只是说:

a.isBefore(b) ? -1 : 1

不确定我是否以正确的方式获得了 1 和 -1。

使用打字稿,这并不那么简单。 打字不允许你说 a - b。

您可以将 moment#valueOf 显式调用为a.valueOf() - b.valueOf()

我偏向于:

momentsArray.sort((a, b) => a.diff(b));

我。

@robertmassaioli小心你的代码,

a.isBefore(b) ? -1 : 1

如果 a 相同,它将交换它们,而不是将它们保持在原位。 我知道这听起来并不多,但对某些人来说可能出乎意料。

此页面是否有帮助?
0 / 5 - 0 等级