自定义排序函数内的Javascript访问参数

时间:2018-01-30 09:22:19

标签: javascript jquery ember.js

我定义了自定义排序功能&如下所示:

myArr.sort(this.sortArrayBy, key);

sortArrayBy: function(a, b) {

    let param = this.get('sortKey'); //How do I get this value here ? cannot pass it as param OR even access via 'this'

    if (a.param < b.param)
        return -1;
    if (a.param > b.param)
        return 1;
    return 0;
},

我想在该函数中传递一个额外的参数。如何访问该类属性?

P.S:此代码在我的Ember控制器类

2 个答案:

答案 0 :(得分:1)

您可以在想要的排序键上使用闭包。

myArr.sort(this.sortArrayBy(key));

sortArrayBy: function (param) {
    return function(a, b) {
        if (a[param] < b[param])
            return -1;
        if (a[param] > b[param])
            return 1;
        return 0;
    };
},

答案 1 :(得分:1)

你不能让这个.sort()采取额外的参数。解决方法是创建一个包装自定义排序函数的函数,该函数 获取附加参数。

您可以定义自己的排序函数,它需要一个额外的参数:

sortArrayBy: function(a, b, param) {
    // ... sort logic here ...
    return 0;
}

然后,在您调用myArr.sort时,您可以定义此函数的包装器,该包装器仅采用预期的两个参数:

var self = this;
var sortFunc = function(a, b) {
    return self.sortArrayBy(a, b, self.get('sortKey'));  
};
myArr.sort(sortFunc, key);