简体   繁体   English

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

[英]Javascript access parameter inside custom sort function

I have a custom sort function defined & call it as below; 我定义了一个自定义排序函数,并按如下方式调用它;

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

I want to pass an additional param inside that function. 我想在该函数内传递其他参数。 How do I get access to that class attribute ? 我如何访问该类属性?

PS: This code is inside my Ember controller class PS:此代码在我的Ember控制器类中

You could use a closure over the wanted sort key. 您可以在所需的排序键上使用闭包。

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

You can't make this .sort() take an extra parameter. 您不能使此.sort()带有额外的参数。 A workaround is to create a function which wraps a custom defined sort function which does take the additional parameter. 一种解决方法是创建一个包装有自定义定义的排序函数的函数,该函数采用附加参数。


You can define your own sort function which takes an extra parameter: 您可以定义自己的带附加参数的排序函数:

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

Then, at the point you call myArr.sort , you can define a wrapper to this function which only takes the expected two parameters: 然后,在调用myArr.sort的点上,您可以为此函数定义一个包装器,该包装器仅采用预期的两个参数:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM