优化此双重比较结果以在javascript中进行排序

优化此双重比较结果以在javascript中进行排序,javascript,optimization,sorting,comparison,Javascript,Optimization,Sorting,Comparison,通常在排序时,您会执行以下操作: if (x < y) return -1 else if (x > y) return 1 else return 0 if(xy)返回1 否则返回0 或 返回((x>y)?1:((x

通常在排序时,您会执行以下操作:

if (x < y) return -1
else if (x > y) return 1
else return 0
if(xy)返回1
否则返回0

返回((x>y)?1:((x
两次比较似乎只需要一次就可以完成。在汇编程序中,您所要做的就是将二者相减到寄存器中,检查是否为负,检查是否为零。问题在于javascript中,如果我们要减去:

var sub = (x - y);
return (sub == 0 ? 0 : ((sub < 0) ? -1 : 1))
var sub=(x-y);
回报率(sub==0?0:((sub<0)?-1:1))
这将导致执行更多的代码

因此,有些问题:

  • 在javascript中有没有简化或加速的方法
  • 像chrome这样的编译javascript解释器可以优化这种比较吗
  • 其他语言呢

在Javascript中,
sort
不必返回
-1
0
1
。它可以返回任何数字。这意味着您只需从另一个数字中减去一个数字即可进行比较

委员会建议采取以下措施:

function compareNumbers(a, b)
{
  return a - b;
}

var nums = [34, 56, 1, 42, 63];
nums.sort(compareNumbers);
// [1, 34, 42, 56, 63]

在Javascript中,
sort
不必返回
-1
0
1
。它可以返回任何数字。这意味着您只需从另一个数字中减去一个数字即可进行比较

委员会建议采取以下措施:

function compareNumbers(a, b)
{
  return a - b;
}

var nums = [34, 56, 1, 42, 63];
nums.sort(compareNumbers);
// [1, 34, 42, 56, 63]

通常,排序算法并不是专门寻找-1或+1,而是0。 在这种情况下,比较函数可以简单到

return x - y ;

通常,排序算法并不是专门寻找-1或+1,而是0。 在这种情况下,比较函数可以简单到

return x - y ;

可以使用array.sort()按字母顺序进行排序,但是如果需要不区分大小写的排序,则需要测试字符串是否相同,或者一个字符串是否大于或小于另一个字符串

array.sort(function(a,b){
  a=a.toLowerCase();
  b=b.toLowerCase();
  if(a==b) return 0;
  return a>b? 1:-1;
}
担心额外的比较不是重点,对小写的转换会消耗循环。所以除非你需要,否则不要使用toLowerCase

如前所示,数字很简单-

array.sort(function(a,b){ return a-b});

可以使用array.sort()按字母顺序进行排序,但是如果需要不区分大小写的排序,则需要测试字符串是否相同,或者一个字符串是否大于或小于另一个字符串

array.sort(function(a,b){
  a=a.toLowerCase();
  b=b.toLowerCase();
  if(a==b) return 0;
  return a>b? 1:-1;
}
担心额外的比较不是重点,对小写的转换会消耗循环。所以除非你需要,否则不要使用toLowerCase

如前所示,数字很简单-

array.sort(function(a,b){ return a-b});

请注意,这只能可靠地工作,因为Javascript使用的是double(我假设它工作可靠,使用double您不能太确定),而相同的代码对于使用2s补码编码的整数将无法正常工作!请注意,这只能可靠地工作,因为Javascript使用的是double(我假设它工作可靠,使用double您不能太确定),而相同的代码对于使用2s补码编码的整数将无法正常工作!