我在對物件陣列進行排序時遇到了一些困難。目前我有一個像排序的資料集
[
{
"index":"football",
"values":0.3,
"id":"1"
},
{
"index":"Unknown",
"values":0.5,
"id":"2"
},
{
"index":"golf",
"values":0.1,
"id":"3"
},
{
"index":"cricket",
"values":0.222,
"id":"4",
},
{
"index":"Other",
"values":0.333,
"id":"5"
},
{
"index":"netball",
"values":0.753,
"id":"6",
},
]
我想要做的是根據他們的價值觀對它進行排序,最高的在上面。為此,我完成了
myDataSet.sort((a, b) => parseFloat(b.values) - parseFloat(a.values));
這似乎有效。但是,這是我正在努力解決的第二部分。無論它按什么順序排序,我總是需要從底部和未知底部開始的其他第二個。所以上面應該變成這個
[
{
"index":"netball",
"values":0.753,
"id":"6",
},
{
"index":"football",
"values":0.3,
"id":"1"
},
{
"index":"cricket",
"values":0.222,
"id":"4",
},
{
"index":"golf",
"values":0.1,
"id":"3"
},
{
"index":"Other",
"values":0.333,
"id":"5"
},
{
"index":"Unknown",
"values":0.5,
"id":"2"
},
]
我嘗試使用過濾器,這似乎將它們放在底部,但其余的不再排序
myDataSet.filter((e) => e.index === 'Other')
.filter((e) => e.index === 'Unknown')
.sort((a, b) => parseFloat(b.values) - parseFloat(a.values));
如何根據它們的值進行排序,但將其他和未知放在底部?
謝謝
uj5u.com熱心網友回復:
我建議創建一個自定義函式來確定排序順序,例如getSortValue(),然后使用 Array.sort():
let a = [ { "index":"football", "values":0.3, "id":"1" }, { "index":"Unknown", "values":0.5, "id":"2" }, { "index":"golf", "values":0.1, "id":"3" }, { "index":"cricket", "values":0.222, "id":"4", }, { "index":"Other", "values":0.333, "id":"5" }, { "index":"netball", "values":0.753, "id":"6", }, ]
function getSortValue(obj) {
const key = obj.index.toLowerCase();
return { "unknown": -2, "other": -1 }[key] || obj.values;
}
console.log(a.sort((a,b) => getSortValue(b) - getSortValue(a)));
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
您可以直接使用所需順序的物件和所有其他未知值的默認值對陣列進行排序。
然后values直接使用,無需轉換。
const
data = [{ index: "netball", values: 0.753, id: "6" }, { index: "football", values: 0.3, id: "1" }, { index: "cricket", values: 0.222, id: "4" }, { index: "golf", values: 0.1, id: "3" }, { index: "Other", values: 0.333, id: "5" }, { index: "Unknown", values: 0.5, id: "2" }],
bottom = { Other: 1, Unknown: 2 };
data.sort((a, b) =>
(bottom[a.index] || 0) - (bottom[b.index] || 0) ||
b.values - a.values
);
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/351238.html
標籤:javascript 排序
