没有得到正确的值排序数组方法

时间:2019-01-31 22:44:18

标签: 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”用于显示数组中的所有项目。改变了吗?

3 个答案:

答案 0 :(得分:2)

您正在使用比较谓词中的console.log。您不能保证此功能在数据上的应用顺序。

输出顺序取决于您的数组排序,它们取决于sort使用的基础排序算法。

有很多排序算法,例如冒泡排序,选择排序,快速排序...,它们可以按不同顺序应用谓词。

答案 1 :(得分:0)

您的比较函数始终返回void。如果a大于b,则需要返回> 0,如果相等则返回0,如果b大于,则返回<0。

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

console.log(arr);

答案 2 :(得分:0)

当您想编写自己的比较器逻辑时,将使用sort函数中的回调。尝试了解compareFunction-

的工作原理
  
      
  • 如果compareFunction(a, b)小于0,则将a排序为小于b的索引(即,a在前)。
  •   
  • 如果compareFunction(a, b)返回0,则使a和b相对不变,但对所有不同的a进行排序   元素。注意:ECMAscript标准不保证这一点   行为,因此并非所有浏览器(例如Mozilla的版本都可以追溯到   至少要到2003年)。
  •   
  • 如果compareFunction(a, b)大于0,则将b排序为小于a的索引(即b排在最前面)。
  •   当给定一对特定的元素a和b作为其两个参数时,
  • compareFunction(a, b)必须始终返回相同的值。如果   返回不一致的结果,然后不确定排序顺序。
  •   
     

来源-   https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort