博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript,将一个函数作为另一个函数的返回值。
阅读量:5287 次
发布时间:2019-06-14

本文共 1250 字,大约阅读时间需要 4 分钟。

假设我们用一个数组保存一组学生的基本信息。

var studentsData =     [{name:"mike",age:17},     {name:"loren",age:16},     {name:"frank",age:18}];

现在,我们需要对这个数组按照姓名(name)字段进行升序排序,在这个场景内,使用数组的sort(compareFunction)方法进行排序,该方法的参数是一个比较函数。

比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。

以下为按照name字段进行排序:

function compareFunctionByName(object1,object2){    var value1=object1["name"];    var value2=object2["name"];    if(value1

结果:

frank

loren
mike

 

这样的排序写法简单有效,但是,如果此时需求变更,除了name外还需要对学生的age进行排序时,一般的做法是另外写一个按照age字段进行排序的比较函数,然后在调用的地方作个条件判断,决定使用哪一个版本的比较函数。

新增加版本的比较函数如下:

function compareFunctionByAge(object1,object2){    var value1=object1["age"];    var value2=object2["age"];    if(value1

上面的写法工作的很好,但是两个版本的比较函数除了比较字段的不同外,其余部分均相同,如果又增加了对其他字段进行排序需求的话,代码的冗余度大大增加,而且代码会越来越丑陋。

 

当这种场景发生时,我们就需要用到js函数中一个非常有用的特性:将一个函数作为另一个函数的返回值。

具体作法,写一个生成函数,该生成函数根据字段名生成相应版本的比较函数,并将比较函数返回作为sort方法的参数。

如下:

function createCompareFunction(fieldName){    return function(object1,object2){        var value1=object1[fieldName];        var value2=object2[fieldName];        if(value1
//按照age字段进行排序 studentsData.sort(createCompareFunction("age"));

如此便解决了高冗余度的问题,并且通用性良好。

 

javascript函数的这一特性在实际中应用点很多,继续挖掘中。。。

^_^。

转载于:https://www.cnblogs.com/kongxianghai/archive/2013/03/24/2979856.html

你可能感兴趣的文章
关于本博客说明
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
国外常见互联网盈利创新模式
查看>>
android:scaleType属性
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Linux中防火墙centos
查看>>
[JS]递归对象或数组
查看>>
linux sed命令
查看>>
程序存储问题
查看>>
优雅地书写回调——Promise
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
css & input type & search icon
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
c# 文件笔记
查看>>