通过双嵌套值对JSON数组进行排序?

时间:2017-07-08 06:40:06

标签: javascript jquery json

我无法找到合理的解决方案,因为我从firebase中提取JSON数据并将其从node.js拉到html文件中。我想通过一个名为“value”的属性对我的数据进行排序,因为我不知道如何在JQuery中访问子子值以进行排序,我想知道是否有人可以帮助我引导我朝着正确的方向前进。

{
    key: "a",
    {
         key: "ab",
         {
               value: 2
         }
         key: "ac",
         {
               value: 0
         }
    }
},
    {
    key: "b",
    {
         key: "bb",
         {
               value: 1
         }
    }
},

输出:

[{ac}, {bb}, {ab}]

2 个答案:

答案 0 :(得分:1)

您的输入和所需输出都以无效符号表示(使用JSON和JavaScript语法),因此我必须做出一些假设。

您可以使用此递归函数,该函数将查找所有嵌套的data.post = data.post || {}; data.post[name] = content; 属性,并将这些值与它们出现的父属性的名称一起收集。最后,这些数据对(父键和值)被排序:

value

答案 1 :(得分:0)

从原始图片中模拟你的JSON:

 var data = {
        key1: {
            "a": { "deliveryshort": "12152017" },
            "b": { "deliveryshort": "10122015" },
            "c": { "deliveryshort": "11302016" },
            "d": { "deliveryshort": "09022014" }
        },
        key2: {
            "a": { "deliveryshort": "10102017" },
            "b": { "deliveryshort": "09102017" }
        },
    };
    function parseDate(dateStr) {
        var month = "" + dateStr[0] + dateStr[1];
        var day = "" + dateStr[2] + dateStr[3];
        var year = "" + dateStr[4] + dateStr[5] + dateStr[6] + dateStr[7];
        var result = new Date(year, month, day);
        return result;
    }
    function sortBy(data, property, converter) {
        var j = new Array();
        for (var item in data) {
            j.push([item, data[item], converter(data[item][property])]);
        }
        j.sort(function (a, b) { return a[2] - b[2] });
        return j;

    }
    function sortData(data) {
        var d = {};
        for (var item in data) {
            var sorted = sortBy(data[item], "deliveryshort", function (a) { return parseDate(a); });
           /*var normalized = new Array();
            for (var i = 0; i < sorted.length; i++) {
                var ni = sorted[i];
                var key = ni[0];
                var obj = ni[1];
                normalized[key] = obj;
            }*/
            d[item] = sorted;
        }

        console.log(d);
        return d;
    }
    sortData(data);