为了账号安全,请及时绑定邮箱和手机立即绑定

我如何使用 JavaScript 实现这种排序?

我如何使用 JavaScript 实现这种排序?

慕容森 2023-01-06 09:28:52

所以我有一个如下所示的“结构”,我需要按照下面的“关键值”的顺序对其进行排序,以获得下面的“输出”。我怎样才能做到这一点?


结构体:


[

    {

        rs: {

            1 MONTHS: "100",

            1 YEAR: "200",

            3 MONTHS: "30",

            6 MONTHS: "400"}


    },

    {

        rs: {

            1 MONTHS: "500",

            1 YEAR: "40",

            3 MONTHS: "700",

            6 MONTHS: "800"}


    },

    {

        rs: {

            1 MONTHS: "199",

            1 YEAR: "1989",

            3 MONTHS: "597",

            6 MONTHS: "20"}


    },

    {

        rs: {

            1 MONTHS: "356",

            1 YEAR: "10",

            3 MONTHS: "877",

            6 MONTHS: "1145"}


    }

]

关键价值观:


["10", "20", "30", "40"]

排序后的输出


[

    {

        rs: {

            1 MONTHS: "356",

            1 YEAR: "10",

            3 MONTHS: "877",

            6 MONTHS: "1145"}


    },

    {

        rs: {

            1 MONTHS: "199",

            1 YEAR: "1989",

            3 MONTHS: "597",

            6 MONTHS: "20"}


    },

    {

        rs: {

            1 MONTHS: "100",

            1 YEAR: "200",

            3 MONTHS: "30",

            6 MONTHS: "400"}


    },

    {

        rs: {

            1 MONTHS: "500",

            1 YEAR: "40",

            3 MONTHS: "700",

            6 MONTHS: "800"}


    }

]

我想过滤我从 API 端点接收的数据结构格式,以根据值对其进行排序,使其与生成的键数组的顺序相同。


查看完整描述

1 回答

?
LEATH

TA贡献1669条经验 获得超6个赞

您可以为所需的顺序获取一个对象,并获取与排序匹配的对象的值。


const

    getValue = o => Object.values(o).find(v => values.includes(v)),

    data = [{ rs: { "1 MONTHS": "100", "1 YEAR": "200", "3 MONTHS": "30", "6 MONTHS": "400" } }, { rs: { "1 MONTHS": "500", "1 YEAR": "40", "3 MONTHS": "700", "6 MONTHS": "800" } }, { rs: { "1 MONTHS": "199", "1 YEAR": "1989", "3 MONTHS": "597",  "6 MONTHS": "20" } }, { rs: { "1 MONTHS": "356", "1 YEAR": "10", "3 MONTHS": "877", "6 MONTHS": "1145" } }],

    values = ["10", "20", "30", "40"],

    order = Object.fromEntries(values.map((v, i) => [v, i + 1]));


data.sort(({ rs: a }, { rs: b }) => order[getValue(a)] - order[getValue(b)]);


console.log(data);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反对 回复 2023-01-06
  • 1 回答
  • 0 关注
  • 10 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信