function createComparisonFunction(propertyName) {
return function(object1,object2) {
var value1 = object1[propertyName];
var value2 = object2[propertyName];
if(value1 < value2) {
return -1;
} else if(value1 > value2) {
return 1;
} else {
return 0;
}
}
};
这是红宝书中一个知识点,这段代码不是太明白
这是为了比较特定数据结构而制造的工具函数。例如数据结构格式为:
这时,一般的
sort
方法需要这么编写,形如:这段代码存在的问题:
硬编码了
value
参数,排序其它字段时必须重新编码。返回 1 / -1 的逻辑是冗余而无聊的。
直接编写排序的匿名函数,在红宝书的年代可读性不够好(现在有箭头函数,其实问题不大)。
所以对上面的 case,红宝书作者设计了一个通用的工具函数,以生成一个【用于排序特定字段】的函数。注意你调用这个工具函数,返回的是一个新函数,而不是排序的结果(所谓高阶函数)。
应用这个封装后,代码形如:
这就起到了简化业务逻辑的作用。
什么不明白, 就是比较两个对象某个属性的大小
createComparisonFunction("test")({'test': 1}, {"test": 2})
返回的是-1
调用函数时,分为两步来看。首先通过
createComparisonFunction()
传入比较的字段。在createComparisonFunction()
函数内,返回一个匿名函数。同时由于匿名函数处在createComparisonFunction()
内,所以你对createComparisonFunction()
传入的参数propertyName
对匿名函数也有效存在。通过上一步,你已经得到的匿名函数包含
propertyName
,此时你就可以传入你要比较的两个对象,在函数内比较他们的propertyName
属性,返回比较结果。这个就叫高阶函数。