具有自定义方法的Node.js array.sort会导致RangeError:超出最大调用堆栈大小
所以,我有一个100,000+项目的数组,这一行导致它吹响了调用堆栈:
@sortedList.sort (a, b) -> return if a.value > b.value then -1 else 1
我即将实施一个自定义的一些变种(build议,任何人?)来解决这个问题,但我只是想确保我没有做一些公然愚蠢的事情,导致它爆炸。
如果a.value == b.value
会发生什么? 如果项目相同,则sort
比较函数应该返回零 :
- 如果
compareFunction(a, b)
小于0,则将compareFunction(a, b)
sorting为低于b
索引。- 如果
compareFunction(a, b)
返回0,则相对于彼此保持a
和b
不变,但相对于所有不同的元素进行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
失去主意,并在整个地方乱成一团; 没有==
分支是说a
前b
和b
前a
,你不能指望从这个明智的结果。