1

所以,我有一个包含 100,000 多个项目的数组,这一行导致它破坏了调用堆栈:

@sortedList.sort (a, b) ->
  return if a.value > b.value then -1 else 1

我即将实施一种自定义的某种类型(建议,有人吗?)来解决这个问题,但我只是想确保我没有做一些导致它爆炸的公然愚蠢的事情。

4

1 回答 1

5

如果 会发生什么a.value == b.value?如果项目相同,sort比较函数应返回零:

  • 如果compareFunction(a, b)小于 0,则排序a到比 更低的索引b
  • 如果compareFunction(a, b)返回 0,则彼此保持不变ab但对所有不同元素进行排序。
  • 如果compareFunction(a, b)大于 0,则排序b到比 更低的索引a

所以你想要更像这样的东西:

if a.value > b.value
  -1
else if a.value < b.value
   1
else
   0

丢失的a.value == b.value分支可能会导致sort失去理智并在整个地方弄得一团糟;没有==分支说a先行bb后行a,您不能期望从中得到明智的结果。

于 2012-07-27T16:17:58.527 回答