javascript - IE Array.sort 不使用比较函数排序

标签 javascript sorting internet-explorer-11

以下代码示例在 IE 11 中无法正常工作。

id = END3 的元素应该是最后一个。

只是不要告诉我需要手动编写排序。实现起来并不是什么大不了的事,但是真的吗?!

var list = [{
    id: "SP1"
  },
  {
    id: "SP4"
  },
  {
    id: "END3"
  },
  {
    id: "SP2"
  }
];

console.log(
  list.sort(function(a, b) {
    if (a.id === "END3") {
      return 1;
    }

    return 0;
  })
);

最佳答案

您的排序比较函数的行为不一致。该函数应该返回 < 0 , 0 ,或> 0 ,不仅仅是10 。如果它没有返回这些值,那么您将给出 sort使用错误的信息,因为您告诉它 a 中的任何比较期望值不相等。不能保证END3将被传递为 a在任何时候,所以所有比较都将是“相等的”,所以结果是不确定的。 SP1, END3 之间也可能存在不一致。 (“等于”)和 END3, SP1 (“更大”)会影响排序算法的假设。

var list = [{id: "SP1"}, {id: "SP4"}, {id: "END3"}, {id: "SP2"}];


console.log(list.sort(function(a, b) {
  if (a.id === 'END3') {
    return 1;
  } else if (b.id === 'END3') {
    return -1;
  } else {
    return 0;
  }
}));

关于javascript - IE Array.sort 不使用比较函数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51651434/

相关文章:

javascript - onClick 不会触发,chrome/safari

Javascript 知道何时加载新页面

C# 用数字对数组列表进行排序

html - IE11 中的行重叠显示 : flex

javascript - 为什么 .parentNode 在 'undefined' 指针上返回 'this'?

javascript - 为什么 Google Maps .getCenter() 返回无效坐标?

performance - 使用另一个堆栈对堆栈进行排序

c++ - : inserting into a priority queue,或追溯排序的速度更快吗?

javascript - IE 11 浏览器将自己识别为 Mozilla

internet-explorer - IE 11 在 Google Analytics 中作为 Mozilla 出现