嘿,伙计们,我有下面的数组,用于在我的应用程序中显示一个平面列表。
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",
},
]
但是,我想根据subjects值对这个数组进行排序。在应用程序中,用户可以选择用数字表示的几个主题,因此,假设用户选择的主题是:
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",
},
]发布于 2022-03-30 08:52:14
您可以创建一个具有选定主题计数的对象,并根据此值进行排序。
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://stackoverflow.com/questions/71674099
复制相似问题