你好,我不太确定为什么我没有得到正确的值,这是一个例子。这是一个基本问题,但我不确定这是否发生在之前...
const arr = [4,1,9,5,6];
arr.sort((a, b) => {
console.log(a);
});
我应该得到:
//输出:4,1、9、5、6
相反,我得到了:
//输出:1,9,5,6
我记得在这种情况下的第一个值“ a”用于显示数组中的所有项目。改变了吗?
答案 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年)。- 如果
当给定一对特定的元素a和b作为其两个参数时,compareFunction(a, b)
大于0,则将b排序为小于a的索引(即b排在最前面)。compareFunction(a, b)
必须始终返回相同的值。如果 返回不一致的结果,然后不确定排序顺序。来源- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort