具有自定义方法的Node.js array.sort会导致RangeError:超出最大调用堆栈大小

所以,我有一个100,000+项目的数组,这一行导致它吹响了调用堆栈:

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

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

       

网上收集的解决方案 "具有自定义方法的Node.js array.sort会导致RangeError:超出最大调用堆栈大小"

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

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

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

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

缺less的a.value == b.value分支可能导致sort失去主意,并在整个地方乱成一团; 没有==分支是说abba ,你不能指望从这个明智的结果。