1

我正在做很多排序,目前这样做是这样的:

function sortby(a, b, prop) {
    if (a[prop].toLowerCase() > b[prop].toLowerCase())
        return 1;
    else
        return -1
}

像这样使用:

someArray.sort(function (a, b) { return sortby(a, b, 'propertyname') });

但我怀疑可以通过应用或绑定做一些更聪明的事情,比如

someArray.sort(sortby.bind(a,b,'propertyname'))?
4

1 回答 1

1

是的,这当然是可能的。apply返回函数的结果,所以在这里不适用,但是,bind适合。

您可能希望阅读Bind 的 MDN 文档

由于 bind 是按顺序工作的,如果你改变参数的顺序,这很好而且很优雅。让我们将签名更改sortby为:function sortby(prop, a, b) {。现在我们可以很容易地告诉 bind 修复第一个参数:

someArray.sort(sortby.bind(undefined, 'propertyname'));

注意undefined. bind(根据文档)的第一个参数是一个新的this参考。由于我们不使用它,我们将通过undefined说我们不想更改上下文。下一个参数告诉 bind 创建一个函数,该函数将 'propertyname' 的值作为第一个参数传递给sortby. 这给了我们一个偏函数应用程序;返回一个带有两个参数的函数,sortby使用我们已经给它的第一个值调用,然后是两个参数。这个函数被传递给sort,根据需要调用它。

手动解释对绑定的调用,它会为您提供如下内容:

someArray.sort(function (a, b) {
    sortby.apply(this, 'propertyname', a, b);
});
于 2013-06-13T10:17:49.940 回答