javascript - js根据对象属性排序时为什么不能直接写呢?
PHP中文网
PHP中文网 2017-04-10 17:05:11
[JavaScript讨论组]

问题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

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

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
PHP中文网

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

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

就能用comObj实现了。

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号