嘿伙計們,我有以下陣列,用于在我的應用程式中顯示平面串列。
Array [
Object {
"data": "Item 1",
"id": "1",
"subjects": "1,8,9,23,11,15,16,14,20",
},
Object {
"data": "Item 2",
"id": "2",
"subjects": "8,11,2,4,16,19",
},
Object {
"data": "Item 3",
"id": "3",
"subjects": "16,20,14,11,9,2",
},
Object {
"data": "Item 4",
"id": "4",
"subjects": "1,16,19",
},
]
但是我想根據主題值對這個陣列進行排序。在應用程式中,用戶可以選擇幾個由數字表示的主題,因此可以說用戶選擇的主題是:
11 , 4 , 2 , 1
我想對陣列進行排序,以便與用戶有 3 個或更多共同主題的專案被排序到頂部,然后是兩個專案,然后是 1,然后沒有,所以上面的陣列在排序后應該如下所示:
Array [
Object {
"data": "Item 2",
"id": "2",
"subjects": "8,11,2,4,16,19",
},
Object {
"data": "Item 1",
"id": "1",
"subjects": "1,8,9,23,11,15,16,14,20",
},
Object {
"data": "Item 3",
"id": "3",
"subjects": "16,20,14,11,9,2",
},
Object {
"data": "Item 4",
"id": "4",
"subjects": "0,16,19",
},
]
我怎樣才能做到這一點?
我一直在搜索陣列排序功能:
Array.prototype.sort()
但是我只看到了如何根據數字比較進行排序我從未見過基于共同值排序的陣列。請有人幫我解決這個問題!
編輯
Array [
Object {
"data": "Item 2",
"id": "2",
"subjects": "8,11,2,4,16,19",
"ranking": "green",
},
Object {
"data": "Item 1",
"id": "1",
"subjects": "1,8,9,23,11,15,16,14,20",
"ranking": "amber",
},
Object {
"data": "Item 3",
"id": "3",
"subjects": "16,20,14,11,9,2",
"ranking": "amber",
},
Object {
"data": "Item 4",
"id": "4",
"subjects": "0,16,19",
"ranking": "red",
},
]
uj5u.com熱心網友回復:
您可以創建一個包含選定主題計數的物件,并按此值降序排序。
const
data = [{ data: "Item 1", id: "1", subjects: "1,8,9,23,11,15,16,14,20" }, { data: "Item 2", id: "2", subjects: "8,11,2,4,16,19" }, { data: "Item 3", id: "3", subjects: "16,20,14,11,9,2" }, { data: "Item 4", id: "4", subjects: "1,16,19" }],
selected = [11, 4, 2, 1],
counts = data.reduce((r, { id, subjects }) => {
r[id] = subjects
.split(',')
.reduce((s, v) => s selected.includes( v), 0);
return r;
}, {});
data.sort((a, b) => counts[b.id] - counts[a.id]);
console.log(data);
console.log(counts);
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454057.html
標籤:javascript 数组 反应式 排序
上一篇:選擇R中每一列的前X值
