Javascript js sort()自定义函数如何传递更多参数?

Javascript js sort()自定义函数如何传递更多参数?,javascript,parameters,sorting,optional-parameters,Javascript,Parameters,Sorting,Optional Parameters,我有一个需要在自定义函数上排序的对象数组,因为我想在几个对象属性上进行多次排序,所以我想将属性的键名以数字方式传递到自定义排序函数中: function compareOnOneFixedKey(a, b) { a = parseInt(a.oneFixedKey) b = parseInt(b.oneFixedKey) if (a < b) return -1 if (a > b) return 1 return 0 } array

我有一个需要在自定义函数上排序的对象数组,因为我想在几个对象属性上进行多次排序,所以我想将属性的键名以数字方式传递到自定义排序函数中:

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)
功能比较OneFixedKey(a、b){
a=parseInt(a.oneFixedKey)
b=parseInt(b.oneFixedKey)
如果(ab)返回1
返回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'))
功能比较键(键,a,b){
a=parseInt(a[键])
b=parseInt(b[键])
如果(ab)返回1
返回0
}
arrayOfObjects.sort(compareOn('myKey'))
这可以用一种方便的方式来完成吗?谢谢。

您可以添加包装:

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"));
功能比较键(键){
返回函数(a,b){
a=parseInt(a[key],10);
b=parseInt(b[key],10);
如果(ab)返回1;
返回0;
};
}
排序(compareOnKey(“myKey”);

是,让比较器从一个生成器返回,该生成器接受一个参数,该参数是您想要的键

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'));
功能比较属性(键){
返回函数(a,b){
a=parseInt(a[key],10);
b=parseInt(b[key],10);
如果(ab)返回1;
返回0;
};
}
sort(compareByProperty('myKey');
compareByProperty('myKey')
返回进行比较的函数,然后将该函数传递到
中。排序

您需要使用该函数,例如使用:

或者您只需进行
compareOn
返回实际的排序函数,并使用外部函数的参数进行参数化(如其他函数所示)。

const objArr=[{
名称:“Z”,
年龄:0
}, {
名称:‘A’,
年龄:25
}, {
名称:“F”,
年龄:5
}]
常数排序键={
姓名:'姓名',
年龄:“年龄”
}
const sortArr=(arr,key)=>{
返回arr.sort((a,b)=>{
返回a[key]b[key]?1:0
})
}
log(“sortKey.name:”,sortArr(objArr,sortKey.name))

console.log(“sortKey.age:”,sortArr(objArr,sortKey.age))
除了方法好之外,它还存在兼容性问题。@VisioN:…但是让很多事情变得更容易:-)对于任何考虑支持旧IE的人来说,链接的MDN页面包含shim@VisioN
.bind
在IE9中受支持,这需要对chrome上的当前代码进行模拟重构,shim补充道,我无法将此工作函数重构为:函数compareOn(a,b,key){a=parseInt(a[key],10)b=parseInt(b[key],10)if(ab)return 1 return 0}@paolo:如果您想使用部分应用程序,则需要先使用
参数(如您的第二个代码片段)。工作正常,但选择.bind()方法具有灵活性。感谢您在parseInt:]中使用基数10重构我的代码。)
arrayOfObjects.sort(compareOn.bind(null, 'myKey'));