Javascript 无法通过排序数组方法获取正确的值

Javascript 无法通过排序数组方法获取正确的值,javascript,arrays,sorting,Javascript,Arrays,Sorting,你好,我不确定为什么我没有得到正确的值,这里有一个例子。这是一个基本的问题,但我不确定这是否发生过 const arr = [4,1,9,5,6]; arr.sort((a, b) => { console.log(a); }); 我应该得到: //产量:4,1,9,5,6 相反,我得到的是: //产量:1,9,5,6 我记得本例中的第一个值“a”用于显示数组中的所有项。它改变了吗?您正在从比较谓词执行控制台.log。您无法保证在您的数据上应用此功能的顺序 输出顺序取决于数组

你好,我不确定为什么我没有得到正确的值,这里有一个例子。这是一个基本的问题,但我不确定这是否发生过

const arr = [4,1,9,5,6]; 
arr.sort((a, b) => {
    console.log(a);
}); 
我应该得到:

//产量:4,1,9,5,6

相反,我得到的是:

//产量:1,9,5,6


我记得本例中的第一个值“a”用于显示数组中的所有项。它改变了吗?

您正在从比较谓词执行
控制台.log
。您无法保证在您的数据上应用此功能的顺序

输出顺序取决于数组顺序
排序所使用的底层排序算法


有许多排序算法,如冒泡排序、选择排序、快速排序。。。它可以以不同的顺序应用谓词。

比较函数总是返回void。如果a大于b,则返回>0;如果它们相等,则返回0;如果b大于,则返回<0

const arr=[4,1,9,5,6];
arr.sort((a,b)=>a-b);

控制台日志(arr)当您想要编写自己的比较器逻辑时,使用排序函数中的回调。尝试了解
compareFunction
-

  • 如果
    compareFunction(a,b)
    小于0,则将a排序到低于b的索引(即a排在第一位)
  • 如果
    compareFunction(a,b)
    返回0,则使a和b彼此保持不变,但根据所有不同的值进行排序 元素。注意:ECMAscript标准不能保证这一点 行为,因此并非所有浏览器(例如,Mozilla版本可追溯到 至少要尊重这一点
  • 如果
    compareFunction(a,b)
    大于0,则将b排序为低于a的索引(即b排在第一位)
  • compareFunction(a,b)
    当给定一对特定的元素a和b作为其两个参数时,必须始终返回相同的值。如果 如果返回不一致的结果,则未定义排序顺序
来源-


1) 请尝试选择更具描述性的标题。2) 您在哪个浏览器/版本上看到此行为?我在FF 64和Chrome 71中对此进行了测试,并在两者上都得到了
4 19 5 6
。不要试图预测哪些元素将按照
排序中的哪个顺序进行测试。(此外,元素可能会被多次测试)如果要按顺序记录,请使用标准数组迭代方法。@marlonparrauiz compare函数会为每次比较返回相同的值。在这种情况下,不能保证顺序是稳定的(即保留的),因此元素可能不会保留在其原始位置(或者它们可能会)@p.s.w.g我之所以问这个问题,是因为我正在学习一个关于数组排序方法的教程,在这个示例中,他正在控制台上记录a值以查看它返回什么,他得到了所有的迭代,我得到了一个不同的迭代,这就是为什么我想知道发生了什么。。。我使用的是谷歌chrome的最新版本,但我不认为这是浏览器版本,因为在教程中,他也使用了谷歌chrome的最新版本……我认为这很接近。可以在中找到键:“此数组的元素已排序。排序不一定稳定(即,比较相等的元素不一定保持其原始顺序)”。在这种情况下,每个比较都将返回undefined,因此结果可能是任意值。上述情况不包括comparefn为每个比较返回相同值的情况。在这种情况下,可能无法维持秩序。