本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~
假设我们用一个数组保存一组先生的基本信息。
var studentsData = [{name:"mike",age:17}, {name:"loren",age:16}, {name:"frank",age:18}];
比拟函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个正数,如果两个参数相等则返回0,如果第一个参数应该位于第二个以后则返回一个正数。
以下为按照name字段进行排序:
function compareFunctionByName(object1,object2){ var value1=object1["name"]; var value2=object2["name"]; if(value1<value2){ return -1; }else if(value1==value2){ return 0; }else{ return 1; } }; studentsData.sort(compareFunctionByName);
frank
loren
mike
这样的排序写法简单有效,但是,如果此时需求变革,除了name外还需要对先生的age进行排序时,一般的做法是另外写一个按照age字段进行排序的比拟函数,然后在调用的地方作个条件判断,决议应用哪个版本的比拟函数。
新增加版本的比拟函数如下:
function compareFunctionByAge(object1,object2){ var value1=object1["age"]; var value2=object2["age"]; if(value1<value2){ return -1; }else if(value1==value2){ return 0; }else{ return 1; } };
当这类场景产生时,我们就需要用到js函数中一个非常有用的特性:将一个函数作为另一个函数的返回值。
具体作法,写一个生成函数,该生成函数根据字段名生成相应版本的比拟函数,并将比拟函数返回作为sort方法的参数。
如下:
function createCompareFunction(fieldName){ return function(object1,object2){ var value1=object1[fieldName]; var value2=object2[fieldName]; if(value1<value2){ return -1; }else if(value1==value2){ return 0; }else{ return 1; } }; }
//按照name字段进行排序
studentsData.sort(createCompareFunction("name"));
//按照age字段进行排序
studentsData.sort(createCompareFunction("age"));
javascript函数的这一特性在实际中应用点很多,继续挖掘中。。。
^_^。
文章结束给大家分享下程序员的一些笑话语录: 现在社会太数字化了,所以最好是有一个集很多功能于一身的设备!