javascript - 根据子元素的 props 对 Json 进行排序(对照表)

标签 javascript jquery json sorting

我正在尝试显示一个表格,其中包含一些项目的比较。这个想法是以正确的方式排序(左边更少,右边更完整),比如:

             Plan1  |  Plan2  |  Plan3
item1           X        X         X
item2           -        X         X
item3           -        -         X

但是我们 vendor 的 API 提供无序的 json。问题是我们有 100 多个项目和将近 20 个计划,因此无法以“硬编码”方式进行过滤。

json 是巨大的,所以只有最少的简单版本是(像这个例子):

[
    {
        "Id": "1",
        "Name": "Item1",
        "Plans": [
            {
                "PlanMaster": "EPTV Max",
                "IdPlan": 1000,
                "HasPlan": true
            },
            {
                "PlanMaster": "EPTV",
                "IdPlan": 1001,
                "HasPlan": true
            },
            {
                "PlanMaster": "Web TV",
                "IdPlan": 1002,
                "HasPlan": true
            }
        ]
    },
    {
        "Id": "2",
        "Name": "Item2",
        "Plans": [
            {
                "PlanMaster": "EPTV Max",
                "IdPlan": 1000,
                "HasPlan": false
            },
            {
                "PlanMaster": "EPTV",
                "IdPlan": 1001,
                "HasPlan": true
            },
            {
                "PlanMaster": "Web TV",
                "IdPlan": 1002,
                "HasPlan": true
            }
        ]
    },
    {
        "Id": "3",
        "Name": "Item3",
        "Plans": [
            {
                "PlanMaster": "EPTV Max",
                "IdPlan": 1000,
                "HasPlan": false
            },
            {
                "PlanMaster": "EPTV",
                "IdPlan": 1001,
                "HasPlan": false
            },
            {
                "PlanMaster": "Web TV",
                "IdPlan": 1002,
                "HasPlan": true
            }
        ]
    }
]

重点是,我如何在 json 中导航以查询诸如“我有多少计划”、“按从少到多的顺序列出计划”等几件事...

这种“排序”/“比较”的问题怎么称呼?我试图谷歌排序等......但找不到太多。我只想知道如何在 javascript 中查询节点,以便能够实现逻辑。

干杯

最佳答案

您可以将计划视为二进制数并将其用作排序标准。

var data = [{ "Id": "1", "Name": "Item1", "Plans": [{ "PlanMaster": "EPTV Max", "IdPlan": 1000, "HasPlan": true }, { "PlanMaster": "EPTV", "IdPlan": 1001, "HasPlan": true }, { "PlanMaster": "Web TV", "IdPlan": 1002, "HasPlan": true }] }, { "Id": "2", "Name": "Item2", "Plans": [{ "PlanMaster": "EPTV Max", "IdPlan": 1000, "HasPlan": false }, { "PlanMaster": "EPTV", "IdPlan": 1001, "HasPlan": true }, { "PlanMaster": "Web TV", "IdPlan": 1002, "HasPlan": true }] }, { "Id": "3", "Name": "Item3", "Plans": [{ "PlanMaster": "EPTV Max", "IdPlan": 1000, "HasPlan": false }, { "PlanMaster": "EPTV", "IdPlan": 1001, "HasPlan": false }, { "PlanMaster": "Web TV", "IdPlan": 1002, "HasPlan": true }] }];

data.sort(function (a, b) {
    function getRange(o) {
        var r = o.Plans.reduce(function (r, a) {
                return r * 2 + !a.HasPlan;
            }, 0);
      
        o.r = r; // just to show what's happen
        return r;
    }

    return getRange(a) - getRange(b);
});

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

关于javascript - 根据子元素的 props 对 Json 进行排序(对照表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41597411/

相关文章:

javascript - HTML CSS JS 键盘在移动屏幕中向上滑动时的问题

Java - 未找到 JSONObject

c# - 将亚音速类序列化为 JSON

javascript - D3 折线图 - 数字与时间成直线(无错误)

javascript - 使用 MySQL 数据库更改发送 WebSocket 更新哪个更有效

javascript - django 形成一个弹出对话框

javascript - 了解 JavaScript 事件和修复动态电子邮件错误的时间

android - 从 JSON 中获取数据到 ListView

javascript - 使用 ionic1 (apk) 与使用 ocrad.js 的 Chrome(调试器)进行图像处理

javascript - 如何用不同的结果替换文本中所有相同的字符/字符串?