JS排序()自定义函数如何传递多个参数?(js sort() custom function how

2019-07-18 15:21发布

我有我需要排序的自定义函数对象的数组,因为我想要做的几个对象属性的这几次,我想通过键名的属性dinamically到自定义排序功能:

function compareOnOneFixedKey(a, b) {
    a = parseInt(a.oneFixedKey)
    b = parseInt(b.oneFixedKey)
    if (a < b) return -1
    if (a > b) return 1
        return 0
}

arrayOfObjects.sort(compareByThisKey)

应该成为这样的:

function compareOnKey(key, a, b) {
    a = parseInt(a[key])
    b = parseInt(b[key])
    if (a < b) return -1
    if (a > b) return 1
        return 0
}
arrayOfObjects.sort(compareOn('myKey'))

可在此方便的方式来完成? 谢谢。

Answer 1:

您将需要部分应用使用的功能,比如bind

arrayOfObjects.sort(compareOn.bind(null, 'myKey'));

或者你只是让compareOn返回实际的排序功能,与外部函数的参数(如由他人证明)参数化。



Answer 2:

您可以添加一个包装:

function compareOnKey(key) {
    return function(a, b) {
        a = parseInt(a[key], 10);
        b = parseInt(b[key], 10);
        if (a < b) return -1;
        if (a > b) return 1;
        return 0;
    };
}

arrayOfObjects.sort(compareOnKey("myKey"));


Answer 3:

是的,从一台发电机,这需要PARAM这是你想要的键返回的比较

function compareByProperty(key) {
    return function (a, b) {
        a = parseInt(a[key], 10);
        b = parseInt(b[key], 10);
        if (a < b) return -1;
        if (a > b) return 1;
        return 0;
    };
}
arrayOfObjects.sort(compareByProperty('myKey'));

compareByProperty('myKey')返回函数做比较,然后将其通入.sort



文章来源: js sort() custom function how can i pass more parameters?