Javascript access parameter inside custom sort function

倾然丶 夕夏残阳落幕 提交于 2019-12-13 08:15:50

问题


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 ?

P.S: This code is inside my Ember controller class


回答1:


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



回答2:


You can't make this .sort() take an extra parameter. 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:

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


来源:https://stackoverflow.com/questions/48517842/javascript-access-parameter-inside-custom-sort-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!