问题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中文网2017-04-10 17:07:11
你的用法错了,比较函数是传一个函数引用进去,所以
arr.sort(compareObj(a,b));
改成arr.sort(comObj);
就能用comObj
实现了。
这同时也回答了你的第一个问题,排序参数的实参是sort
每次比较的时候自己传入的,不是你传入的,所以你只需传一个比较函数给sort
就可以了