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

时间:2012-07-27 15:49:57

标签: node.js sorting coffeescript

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

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

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

1 个答案:

答案 0 :(得分:5)

如果a.value == b.value会怎样?如果项目相同,则为sort comparison function should return zero

  
      
  • 如果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失去理智并在整个地方弄得一团糟;没有==分支表示 ab 之前消失, ba 之前消失,你不能指望得到合理的结果。