IE Array.sort 不使用比较功能排序

IE Array.sort not sorting with compare function

这是在 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;
  })
);

Return -1 而不是 else 块中的 0。当比较方法 returns 0 它保持 ab 不变。

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

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

    return -1;
  })
);

Docs

您的排序比较函数运行不一致。该函数应该 return < 00> 0,而不仅仅是 10.如果它没有 returning 这些值,那么您将向 sort 提供错误的信息,因为您告诉它任何 a 不是所需值的比较都是相等的。不能保证 END3 会在任何时候作为 a 传递,因此所有比较都将是 "equal",因此未定义实际结果是什么。也有可能SP1, END3("equal")和END3, SP1("greater")的不一致会影响排序算法的假设。

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;
  }
}));