Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 不可靠矩数组排序_Node.js_Sorting_Momentjs - Fatal编程技术网

Node.js 不可靠矩数组排序

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 }, {

我有一个对象数组,每个对象都包含一个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 },
  { 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);

详细解释。

我完全忽略了这一点。彻底的错误。非常感谢!