在Node.js和浏览器中对数组结果进行排序不同

时间:2019-06-03 11:16:58

标签: javascript node.js sorting v8

当比较器函数返回布尔值而不是数字时,在浏览器和Node.js环境中对数组进行排序的行为有所不同。

例如

var x =  [
        {
            "id": 1110000003977716,
            "updatedAt": 1558353055000,
        },
        {
            "id": 1,
            "updatedAt": 1551783874000,
        },
        {
            "id": 2,
            "updatedAt": 1551788206000,
        },
        {
            "id": 3,
            "updatedAt": 1552066859000,
        },
        {
            "id": 4,
            "updatedAt": 1552578810000,
        },
        {
            "id": 5,
            "updatedAt": 1552598063000,
        },
        {
            "id": 6,
            "updatedAt": 1554906497000,
        },
        {
            "id": 7,
            "updatedAt": 1555061487000,
        },
        {
            "id": 8,
            "updatedAt": 1555357728000,
        },
        {
            "id": 9,
            "updatedAt": 1555616572000,
        },
        {
            "id": 10,
            "updatedAt": 1555698720000,
        },
        {
            "id": 11,
            "updatedAt": 1555843111000,
        },
        {
            "id": 12,
            "updatedAt": 1555851294000,
        },
        {
            "id": 13,
            "updatedAt": 1557408493000,

        }
    ];

和排序方法

x.sort((p, n) => p.updatedAt < n.updatedAt)

浏览器正确地对此数组排序

  

输出

 [
   {
      "id":1110000003977716,
      "updatedAt":1558353055000
   },
   {
      "id":13,
      "updatedAt":1557408493000
   },
   {
      "id":12,
      "updatedAt":1555851294000
   },
   {
      "id":11,
      "updatedAt":1555843111000
   },
   {
      "id":10,
      "updatedAt":1555698720000
   },
   {
      "id":9,
      "updatedAt":1555616572000
   },
   {
      "id":8,
      "updatedAt":1555357728000
   },
   {
      "id":7,
      "updatedAt":1555061487000
   },
   {
      "id":6,
      "updatedAt":1554906497000
   },
   {
      "id":5,
      "updatedAt":1552598063000
   },
   {
      "id":4,
      "updatedAt":1552578810000
   },
   {
      "id":3,
      "updatedAt":1552066859000
   },
   {
      "id":2,
      "updatedAt":1551788206000
   },
   {
      "id":1,
      "updatedAt":1551783874000
   }
]

但是在node.js中,结果是不同的(有时是正确的);

  

输出

[
   {
      "id":7,
      "updatedAt":1555061487000
   },
   {
      "id":1110000003977716,
      "updatedAt":1558353055000
   },
   {
      "id":8,
      "updatedAt":1555357728000
   },
   {
      "id":13,
      "updatedAt":1557408493000
   },
   {
      "id":12,
      "updatedAt":1555851294000
   },
   {
      "id":11,
      "updatedAt":1555843111000
   },
   {
      "id":10,
      "updatedAt":1555698720000
   },
   {
      "id":9,
      "updatedAt":1555616572000
   },
   {
      "id":6,
      "updatedAt":1554906497000
   },
   {
      "id":5,
      "updatedAt":1552598063000
   },
   {
      "id":4,
      "updatedAt":1552578810000
   },
   {
      "id":3,
      "updatedAt":1552066859000
   },
   {
      "id":2,
      "updatedAt":1551788206000
   },
   {
      "id":1,
      "updatedAt":1551783874000
   }
]

请解释为什么这两种引擎的行为不同。

P.S。我已经在Chrome和Firefox中测试了我的代码。

0 个答案:

没有答案