簡體   English   中英

js sort()自定義函數如何傳遞更多參數?

[英]js sort() custom function how can i pass more 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
}

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'))

這可以方便嗎? 謝謝。

你可以添加一個包裝器:

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"));

您需要部分應用該函數,例如使用bind

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

或者你只是讓compareOn返回實際的sort函數,使用外部函數的參數進行參數化(如其他函數所示)。

是的,讓比較器從一個生成器返回,該生成器需要一個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

 const objArr = [{ name: 'Z', age: 0 }, { name: 'A', age: 25 }, { name: 'F', age: 5 }] const sortKey = { name: 'name', age: 'age' } const sortArr = (arr, key) => { return arr.sort((a, b) => { return a[key] < b[key] ? -1 : a[key] > b[key] ? 1 : 0 }) } console.log("sortKey.name: ", sortArr(objArr, sortKey.name)) console.log("sortKey.age: ", sortArr(objArr, sortKey.age)) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM