Node.js 不可靠矩数组排序
我有一个对象数组,每个对象都包含一个momentjs对象日期戳,我认为按它排序很简单。由于某些原因,它返回的排序不准确:Node.js 不可靠矩数组排序,node.js,sorting,momentjs,Node.js,Sorting,Momentjs,我有一个对象数组,每个对象都包含一个momentjs对象日期戳,我认为按它排序很简单。由于某些原因,它返回的排序不准确: const sortedArray=[…合并].sort((a,b)=>(a.txDate.isAfter(b.txDate)) 我得到的是: [ { txDate: moment("2018-02-14T00:00:00.000"), id: 45 }, { txDate: moment("2017-12-31T00:00:00.000"), id: 0 }, {
const sortedArray=[…合并].sort((a,b)=>(a.txDate.isAfter(b.txDate))代码>
我得到的是:
[ { txDate: moment("2018-02-14T00:00:00.000"), id: 45 },
{ txDate: moment("2017-12-31T00:00:00.000"), id: 0 },
{ txDate: moment("2018-02-15T00:00:00.000"), id: 46 },
{ txDate: moment("2018-01-02T00:00:00.000"), id: 2 },
{ txDate: moment("2018-01-01T00:00:00.000"), id: 1 },
{ txDate: moment("2018-02-17T00:00:00.000"), id: 48 },
...
]
显然,这不是按txDate按时间顺序排序的
我尝试通过选取一些排序不正确的对象,并在较小的样本大小上尝试相同的算法来隔离问题:
const mergedSample = [merged[0], merged[45], merged[46], merged[51], merged[52], merged[58], merged[49], merged[40], merged[80], merged[37]]
const sortedArraySample = [...mergedSample].sort((a, b) => (a.txDate.isAfter(b.txDate)));
出于某种原因,这是可行的
[ { txDate: moment("2017-12-31T00:00:00.000"), id: 0 },
{ txDate: moment("2018-02-06T00:00:00.000"), id: 37 },
{ txDate: moment("2018-02-09T00:00:00.000"), id: 40 },
{ txDate: moment("2018-02-14T00:00:00.000"), id: 45 },
{ txDate: moment("2018-02-15T00:00:00.000"), id: 46 },
{ txDate: moment("2018-02-18T00:00:00.000"), id: 49 },
{ txDate: moment("2018-02-20T00:00:00.000"), id: 51 },
{ txDate: moment("2018-02-21T00:00:00.000"), id: 52 },
{ txDate: moment("2018-02-27T00:00:00.000"), id: 58 },
{ txDate: moment("2018-03-21T00:00:00.000"), id: 80 } ]
我认为这可能是内存问题,排序在更大的负载下表现得很奇怪,但完整的“合并”数组的长度只有90左右,因此我觉得可以放心地假设情况并非如此。经过几个小时的努力,我已经猜不出了。想法?Array.prototype.sort接受一个函数,该函数基于比较返回一个整数(0,<0,>0)。isAfter返回一个布尔值,因此您的排序函数在测试用例中偶然工作,并且它可能根据浏览器实现的不同而有所不同
矩可以使用+/-运算符,您的排序功能可以是:
const sortedArray = [...merged].sort((a, b) => a.txDate - b.txDate);
看
详细解释。我完全忽略了这一点。彻底的错误。非常感谢!