在Javascript中对数组进行数字排序
你好, 我不熟悉stackoverflow和编码,所以我希望您不介意我问这样一个琐碎的问题 我了解到对数组进行数字排序的方法如下。 我也知道更简单的ES6版本在Javascript中对数组进行数字排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,你好, 我不熟悉stackoverflow和编码,所以我希望您不介意我问这样一个琐碎的问题 我了解到对数组进行数字排序的方法如下。 我也知道更简单的ES6版本 var ax=[],bx=[]; 函数排序编号(a,b){ 推力(a); bx.推(b); 返回a-b; } var numArray=[140000,104,99,2]; numArray.sort(sortNumber); log('array='+numArray); console.log('a='+ax); log('b='+
var ax=[],bx=[];
函数排序编号(a,b){
推力(a);
bx.推(b);
返回a-b;
}
var numArray=[140000,104,99,2];
numArray.sort(sortNumber);
log('array='+numArray);
console.log('a='+ax);
log('b='+bx)代码>
有人能告诉我a和b是如何确定的吗
这完全取决于JavaScript引擎的sort
实现。所有这一切告诉我们的是,它们将是需要比较的数组条目,以便排序算法能够完成它的工作
如果您愿意,您可以看到V8的实现,它是。(V8是Chromium、Chrome、Brave和Node.js中使用的JavaScript引擎。)
我应该注意到,V8没有使用您问题中显示的a
和b
的值,它使用104
、99
和2
表示a
和140000
、104
和99
表示b
您可以在此处查看当前浏览器中的JavaScript引擎使用的浏览器:
var avalues=[];
var bvalue=[]
函数排序编号(a,b){
console.log(“a=“+a+”,b=“+b”);
推(a);
b值推送(b);
返回a-b;
}
var numArray=[140000,104,99,2];
numArray.sort(sortNumber);
log(“完成,结果:”,numArray.join(“,”);
log(“a值:”,avalues.join(“,”);
log(“b值:”,bvalue.join(“,”)代码>我想你的问题是这个排序功能是如何工作的
排序函数需要比较函数(比如需要根据什么对数组进行排序。它可以是任何东西)
在上面的sortNumber函数中,a和b只不过是numaray的两个值。
示例-调用numaray.sort(sortNumber)
时;它将相互调用数组中的所有元素(您需要比较每个元素)。
如果a-b>0
,则a大于b。
如果a-b<0
,则b大于a。
如果a-b=0
,则两者相等。
将在所有元素[140000、104、99、2]上检查此条件李>
希望这能有所帮助。我只是在这种情况下使用lodash
_.sortBy([140000, 104, 99, 2]) // => [2, 99, 104, 140000]
我不认为这是正在发生的事情。您是如何确定a
和b
的那些值的?a
和b
没有这些值。尝试在排序函数中使用console.logconsole.log('a:',a,'b:',b)
。您是如何得出这些值的?我很好奇您使用的浏览器/JavaScript引擎为您提供了这些值。。。?它似乎不是Edge或IE11中V8(Chrome)、SpiderMonkey(Firefox)或ChakraCore的当前版本。是的,我使用Firefox中playcode.io上的console.log()确定了这些值。但正如我从这里的答案中了解到的,这些值是随机选择的,不同的JavaScript引擎可能会有所不同。@laines-它们不是随机选择的。它们是由sort
实现非常仔细地选择的。我看不到您在Firefox中显示的值,但我们可能使用不同的版本sort
最近在多个JavaScript引擎中发生了变化,变成了稳定排序(stable=相等的元素不会相对移动)。