search

Home  >  Q&A  >  body text

javascript - js根据对象属性排序时为什么不能直接写呢?

问题1:sort排序中传入的函数是怎么对sort进行控制的?同时sort里面的排序函数中传入的实参是怎么获取的啊?

问题2:在js中利用sort(),根据对象的属性进行排序,为什么不能直接在排序函数里面写?而是要用返回函数的形式?

    var a = {name="father",age=40};
    var b = {name="child",age=21};
    var c = {name="child1",age=29};
    var d = {name="child2",age=19};
    var arr = [a,b,c,d];
    function comObj(o1,o2){
        return o1.age-o2.age;
    }
    
    function compareObj(){
        return function (o1,o2){
            return o1.age-o2.age;
        }
    }
    arr.sort( compareObj(a,c) );
    for( var i=0;i<arr.length;i++) {
        console.log(arr[i].age);
    }

如上,为什么comObj不能实现而compareObj能实现排序呢?同时排序函数里面的参数是怎么传进去的..
为什么arr.sort( compareObj(a,c) )中compareObj函数里面的参数传数组中任意的都可以实现排序?

PHP中文网PHP中文网2822 days ago217

reply all(1)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 17:07:11

    你的用法错了,比较函数是传一个函数引用进去,所以

    arr.sort(compareObj(a,b));改成arr.sort(comObj);

    就能用comObj实现了。

    这同时也回答了你的第一个问题,排序参数的实参是sort每次比较的时候自己传入的,不是你传入的,所以你只需传一个比较函数给sort就可以了

    reply
    0
  • Cancelreply