簡體   English   中英

如何根據分數對對象數組進行排序 - Javascript

[英]How to sort an array of objects based on scores - Javascript

我有一個對象數組,其中包含我要排序的數據(它有更多屬性),如下所示:

[
    {
        "data": {
            "id": "green"
        }
    },
    {
        "data": {
            "id": "red"
        }
    },
    {
        "data": {
            "id": "blue"
        }
    }
]

id是我需要使用的嵌套屬性,以便根據從不同對象提供的分數進行排序,如下所示:

{
    "green": 5,
    "red": 3,
    "blue": 8
}

我正在嘗試找到對我的對象數組進行排序的最佳方法,但是到目前為止還沒有成功。

Javascripts 內置的排序函數有一個可選的比較函數參數。 以下代碼利用此功能解決您的問題:

 var array = [ { "data": { "id": "green" } }, { "data": { "id": "red" } }, { "data": { "id": "blue" } } ]; var scores = { "green": 5, "red": 3, "blue": 8 }; array.sort((a, b) => (scores[a.data.id] - scores[b.data.id])); console.log(array);

你可以像這樣對它們進行排序: https ://jsfiddle.net/Ldvja31t/1/

const scores = {
    "green": 5,
    "red": 3,
    "blue": 8
};

const myData = [
    {
        "data": {
            "id": "green"
        }
    },
    {
        "data": {
            "id": "red"
        }
    },
    {
        "data": {
            "id": "blue"
        }
    }
];

myData.sort((d1, d2) => {
    return scores[d1.data.id] - scores[d2.data.id]
});

console.log(myData)

給出的兩個答案應該可以正常工作。 但是我還想補充一點,您可以使用枚舉。 例子

這是枚舉用法的單獨示例並將其排序到對象數組中

const enum Order {
    Start = 'Start',
    Run = 'Run',
    End = 'End',
}

const predicate = (a, b) => {
    const map = {};
    map[Order.Start] = 1;
    map[Order.Run] = 2;
    map[Order.End] = 3;

    if (map[a] < map[b]) {
        return -1;
    }

    if (map[a] > map[b]) {
        return 1;
    }

    return 0;
}

const data = [Order.End, Order.Run, Order.Start];

const result = data.sort(predicate);

console.log(result);

暫無
暫無

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

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