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

时间:2018-08-02 10:33:44

标签: 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;
  })
);

2 个答案:

答案 0 :(得分:1)

在else块中返回-1而不是0。当compare方法返回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

答案 1 :(得分:1)

您的排序比较功能行为不一致。该函数应该返回 < 00> 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;
  }
}));