当比较器函数返回布尔值而不是数字时,在浏览器和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中测试了我的代码。