JavaScript排序比较函数

JavaScript排序比较函数,javascript,Javascript,基本上,我想构建一个函数,通过对象的属性/成员变量之一对数组中的对象进行排序。我确信比较器函数是隐藏错误的地方,但我不是100%确定 调用sort函数后应该得到的输出是1,2,3。我得到1,3,2,这意味着它是不变的 这是完整的js代码(带有一些注释): var arr=[]; //对象定义和创建 var main=document.getElementById(“main”); 变量任务={ 姓名:“, 优先级:0 }; //首先 var one=Object.create(任务); 1.优先

基本上,我想构建一个函数,通过对象的属性/成员变量之一对数组中的对象进行排序。我确信比较器函数是隐藏错误的地方,但我不是100%确定

调用sort函数后应该得到的输出是
1,2,3
。我得到
1,3,2
,这意味着它是不变的

这是完整的js代码(带有一些注释):

var arr=[];
//对象定义和创建
var main=document.getElementById(“main”);
变量任务={
姓名:“,
优先级:0
};
//首先
var one=Object.create(任务);
1.优先权=1;
//附议
var two=Object.create(任务)
2.优先权=3;
//最后
var三=Object.create(任务);
3.优先权=2;
//附加
arr.push(一个);
arr.push(两个);
arr.push(三个);
//排序函数
函数sortT(){
arr.sort(compareFN);
}
//竞争函数
函数compareFN(){
返回task.priority
编辑:解决方案如下-如前所述,比较器函数确实是问题所在,正确的写入方法如下:

function compareFN(taskA, taskB) {
   return taskA.priority < taskB.priority;
}
函数比较n(任务A、任务B){
返回taskA.priority
比较器存在多个问题:

  • 它指的是全局
    任务
    对象,而不是要比较的对象
  • 它将对象与自身进行比较
  • 它应该执行一个任务
  • 尝试:


    compare函数需要两个参数:它应该比较的第一个和第二个元素。 因此,您的compareFN应该如下所示:

    function compareFN(taskA, taskB) {
       return taskA.priority - taskB.priority;
    }
    

    编辑:,它应该执行a,所以简单的
    a
    在这里不是一个好主意

    您需要更改比较函数的签名以包含这两个任务

    对于升序(通常是您想要的),您需要执行b
    //comperator function
    function compareFN(a, b) {
        return b.priority < a.priority;
    }
    
    //comperator函数
    函数比较n(a,b){
    返回b.priority
    比较器函数返回负值、零值或正值。这三者构成了这里所谓的三方比较。 因此: ''' 函数cmp((a,b)=>{ //上升的 返回a-b } '''
    对于降序返回b-a

    这是从后到前的,您将得到3,2,1比较错误;请参阅NPE的答案以获得正确的解决方案。
    function compareFN(taskA, taskB) {
       return taskA.priority - taskB.priority;
    }
    
    //comperator function
    function compareFN(a, b) {
        return b.priority < a.priority;
    }