javascript - 关于比较函数的问题

查看:89
本文介绍了javascript - 关于比较函数的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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;
        }
    }
};

这是红宝书中一个知识点,这段代码不是太明白

解决方案

这是为了比较特定数据结构而制造的工具函数。例如数据结构格式为:

let arr = [{ name: 'foo', value: 123 }, { name: 'bar', value: 456 }]

这时,一般的 sort 方法需要这么编写,形如:

arr.sort(function (a, b) { return a.value - b.value > 0 ? 1 : -1 })

这段代码存在的问题:

  1. 硬编码了 value 参数,排序其它字段时必须重新编码。

  2. 返回 1 / -1 的逻辑是冗余而无聊的。

  3. 直接编写排序的匿名函数,在红宝书的年代可读性不够好(现在有箭头函数,其实问题不大)。

所以对上面的 case,红宝书作者设计了一个通用的工具函数,以生成一个【用于排序特定字段】的函数。注意你调用这个工具函数,返回的是一个新函数,而不是排序的结果(所谓高阶函数)。

应用这个封装后,代码形如:

// 创造一个【根据 value 字段来排序】的函数
let compareFn = createComparisonFunction('value')
// 将创造的函数传入 sort 中作为排序依据
arr.sort(compareFn)

这就起到了简化业务逻辑的作用。

这篇关于javascript - 关于比较函数的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆