首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >响应基于公共值的本机排序数组

响应基于公共值的本机排序数组
EN

Stack Overflow用户
提问于 2022-03-30 08:40:14
回答 1查看 74关注 0票数 1

嘿,伙计们,我有下面的数组,用于在我的应用程序中显示一个平面列表。

代码语言:javascript
复制
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值对这个数组进行排序。在应用程序中,用户可以选择用数字表示的几个主题,因此,假设用户选择的主题是:

11421

我想对数组进行排序,以便将与用户相同的3个或多个主题的项排序到顶部,然后用两个和1个排序,然后没有排序,因此上面的数组在排序后应该如下所示:

代码语言:javascript
复制
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",
    },
]

我怎样才能做到这一点?

我一直在搜索数组排序函数:

代码语言:javascript
复制
Array.prototype.sort()

然而,我只看过如何根据数字比较进行排序,我从未见过基于值的数组排序是相同的。有人能帮我吗?

编辑

代码语言:javascript
复制
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",
    },
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-30 08:52:14

您可以创建一个具有选定主题计数的对象,并根据此值进行排序。

代码语言:javascript
复制
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);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71674099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档