【问题标题】:Why ExtJS sorter function is obliged to return -1/0/1为什么 ExtJS 排序器函数必须返回 -1/0/1
【发布时间】:2021-11-19 19:54:07
【问题描述】:

Ext.util.Sorter.sorterFn 返回值限制为-1/0/1。我还在源代码中的 cmets 中发现了这种期望的提及。
为什么不直接返回any negative number/0/any positive number

我不是在问为什么有一个可以方便地返回 -1/0/1 的比较器是件好事。
我在问为什么框架的作者决定用 -1/0/1 限制我们,即使 JS 本身在其比较器回调中允许 any negative number/0/any positive number

【问题讨论】:

  • 这是一个非常基本的排序机制。它决定是否从排序的角度来看两个输入值是否相等 (0),或者第一个在 (-1) 之前还是在 (1) 第二个参数之后。其他数字是什么意思?
  • @PeterKoltai 问题是关于为什么我们坚持使用-1/0/1,为什么不简单地使用any negative number/0/any positive number
  • @AndreyGodyaev 我认为这只是一个效率考虑。
  • @PeterKoltai 最有效的数字比较器是(a, b) => a - b,因此不能作为效率考虑因素。

标签: extjs comparator


【解决方案1】:

基本上你可以使用任何数字,只要它们有顺序,比如 -1/0/1 或 -12/0/200。

这是一个例子:

            sorters: [{
                sorterFn: function(person1, person2) {
                    let lhs = person1.data.name,
                        rhs = person2.data.name;

                    return (lhs > rhs) ? 200 : (lhs === rhs ? 0 : -12);
                }
            }],

这里是小提琴,它显示了结果Fiddle

!!!首先,您可能要考虑来自 PeterKoltai 和 aaandri98 的 cmets !!!

进一步 - 为了让每个人(现在和将来)都可以阅读您的代码,您可能希望使用静态数字,即 -1/0/1。

规则是:一个必须是负的,一个是正的,因为 Ext.Array.binarySearch 里面的部分

if (comparison >= 0) {
    begin = middle + 1;
} else if (comparison < 0) {
    end = middle - 1;
}

【讨论】:

  • 你当然不能用任何值替换零,Ext.Array.binarySearch 期望排序器在相等时为零。
  • 你是对的。更新了帖子并添加了关于 Ext.Array.binarySearch 的部分。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多