我正在使用 anArrayOfObjects.sort((a, b) => a.value - b.value)
,其中某些对象没有 value
属性.
这会导致 Firefox 和 Chrome 中出现不同的结果,Chrome 似乎会将没有 value
属性/未定义值的对象排序到最后,而 Firefox 则不会。
规范没有规定 Chrome 给出的结果,这意味着 Firefox 结果是错误的吗?或者这部分排序
结果取决于特定的实现?
const data2 = [
{ 'name' : 'a', 'value' : 5 },
{ 'name' : 'b', 'value' : 2 },
{ 'name' : 'c' },
{ 'name' : 'd', 'value' : 1 }
];
console.log('before sorting: ', data2);
data2.sort((a, b) => a.value - b.value);
console.log('after sorting: ', data2);
最佳答案
两者都不是“错误的”。
未定义 - 未定义
、未定义 - 1
和 1 - 未定义
均返回 NaN
和 NaN
与某些东西相比总是 false
。
这两个浏览器之间的差异可能是由于排序实现造成的。
使用的排序算法可能会给出不同的结果,具体取决于预先值的顺序以及实现如何处理 NaN
。
关于javascript - Chrome 和 Firefox 中 Array.sort(比较函数) 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73854983/