Javascript 如何按';力矩';日期值?

Javascript 如何按';力矩';日期值?,javascript,momentjs,Javascript,Momentjs,数组由如下对象组成 [ { name: 'john', date: '21-07-2020', car: 'bmw' }, { name: 'fred', date: '14-10-2020', car: 'tesla' } ] 我正在尝试使用矩的isBefore函数按升序对其排序,但它不起作用,使用矩库: array.sort((a, b) => moment(a.date, 'DD-MM-YYYY').isBefore(

数组由如下对象组成

[
  {
    name: 'john',
    date: '21-07-2020',
    car: 'bmw'
  },
  {
    name: 'fred',
    date: '14-10-2020',
    car: 'tesla'
  }
]
我正在尝试使用矩的
isBefore
函数按升序对其排序,但它不起作用,使用矩库:

array.sort((a, b) => moment(a.date, 'DD-MM-YYYY').isBefore(moment(b.date, 'DD-MM-YYYY')))

你可以做一个简单的减法,然后使用

const dateArray=['14-10-2020','21-07-2020']
dateArray.sort((a,b)=>新时刻(a).format('DD-MM-YYYY')-新时刻(b).format('DD-MM-YYYY'))
console.log(mySortedArray)

你只需做一个简单的减法运算就可以了

const dateArray=['14-10-2020','21-07-2020']
dateArray.sort((a,b)=>新时刻(a).format('DD-MM-YYYY')-新时刻(b).format('DD-MM-YYYY'))
console.log(mySortedArray)

无需将字符串转换为片刻来排序

arr.sort(({date:date1},{date:date2})=>
      date1.split("-").reverse().join('')
        .localeCompare(
              date2.split("-").reverse().join('')));
const arr=[
{
姓名:'约翰',
日期:2020年7月21日,
汽车:“宝马”
},
{
姓名:“弗雷德”,
日期:“14-10-2020”,
汽车:“特斯拉”
}
];
arr.sort({date:date1},{date:date2})=>date1.split(“”.reverse().join(“”).localeCompare(date2.split(“”.reverse().join(“”));

控制台日志(arr)无需将字符串转换为片刻来排序

arr.sort(({date:date1},{date:date2})=>
      date1.split("-").reverse().join('')
        .localeCompare(
              date2.split("-").reverse().join('')));
const arr=[
{
姓名:'约翰',
日期:2020年7月21日,
汽车:“宝马”
},
{
姓名:“弗雷德”,
日期:“14-10-2020”,
汽车:“特斯拉”
}
];
arr.sort({date:date1},{date:date2})=>date1.split(“”.reverse().join(“”).localeCompare(date2.split(“”.reverse().join(“”));

控制台日志(arr)使用瞬间的
diff

array.sort((a, b) => moment(a.date, 'DD-MM-YYYY').diff(moment(b.date, 'DD-MM-YYYY')))

使用力矩
diff

array.sort((a, b) => moment(a.date, 'DD-MM-YYYY').diff(moment(b.date, 'DD-MM-YYYY')))
这个问题是因为返回布尔值和排序回调函数期望值,所以需要映射此值

// ascending
array.sort((a, b) =>
    moment(a.date, 'DD-MM-YYYY').isBefore(moment(b.date, 'DD-MM-YYYY')) ? -1 : 1,
)

// descending
array.sort((a, b) =>
    moment(a.date, 'DD-MM-YYYY').isBefore(moment(b.date, 'DD-MM-YYYY')) ? 1 : -1,
)


你也可以在没有时间限制的情况下完成

这个问题是因为返回布尔值和排序回调函数期望值,所以需要映射此值

// ascending
array.sort((a, b) =>
    moment(a.date, 'DD-MM-YYYY').isBefore(moment(b.date, 'DD-MM-YYYY')) ? -1 : 1,
)

// descending
array.sort((a, b) =>
    moment(a.date, 'DD-MM-YYYY').isBefore(moment(b.date, 'DD-MM-YYYY')) ? 1 : -1,
)


你也可以在没有时间限制的情况下完成

使用“矩”进行排序

例如:

const array = [
    {
        name: 'john',
        date: '21-07-2020',
        car: 'bmw'
    },
    {
        name: 'fred',
        date: '14-10-2020',
        car: 'tesla'
    },
    {
        name: 'bed',
        date: '15-10-2020',
        car: 'ferrari'
    },
    {
        name: 'j',
        date: '12-10-2020',
        car: 'rolls royce'
    }
];

array.sort((a, b) => sortDate(a.date, b.date)); // sort ascending
array.sort((a, b) => sortDate(a.date, b.date, 'desc')); // sort descending
使用“矩”进行排序

例如:

const array = [
    {
        name: 'john',
        date: '21-07-2020',
        car: 'bmw'
    },
    {
        name: 'fred',
        date: '14-10-2020',
        car: 'tesla'
    },
    {
        name: 'bed',
        date: '15-10-2020',
        car: 'ferrari'
    },
    {
        name: 'j',
        date: '12-10-2020',
        car: 'rolls royce'
    }
];

array.sort((a, b) => sortDate(a.date, b.date)); // sort ascending
array.sort((a, b) => sortDate(a.date, b.date, 'desc')); // sort descending

您的排序逻辑是反向的。对于在排序中工作的布尔函数,false值必须表示a在b之前,true表示b在a之前。在这里,如果a在b之前,则返回true。排序逻辑是向后的。对于在排序中工作的布尔函数,false值必须表示a在b之前,true表示b在a之前。在这里,如果a在b之前,则返回true。这并不能回答问题,他在使用矩。@Misha它确实回答了问题,因为它解决了问题。在日期上使用拆分、反转和联接方法不是一个好方法。对于它应该做的事情来说,它太“复杂”了一点;)这并不能回答问题,他使用的是矩。@Misha它确实回答了问题,因为它解决了问题。在日期上使用拆分、反转和联接方法不是一个好方法。对于它应该做的事情来说,它太“复杂”了一点;)这还有一个优点,就是与开发人员将要编写的大多数其他比较函数相似,因此其他开发人员将很容易理解它
(a,b)=>b-a
。这还有一个优点,就是与开发人员将要编写的大多数其他比较函数相似,因此其他开发人员将很容易理解它
(a,b)=>b-a