Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于值的Json排序_Javascript_Json - Fatal编程技术网

Javascript 基于值的Json排序

Javascript 基于值的Json排序,javascript,json,Javascript,Json,我有示例json,我需要使用javascript/jquery根据值进行排序。 我在下面添加了示例json代码和预期的输出代码。 例如,使用以下代码: var json = { "users": { "metrics": { "e-f2e04fc7aa72": { "order": 5, "displayName": "User5" },

我有示例json,我需要使用javascript/jquery根据值进行排序。 我在下面添加了示例json代码和预期的输出代码。 例如,使用以下代码:

   var json = {
    "users": {
        "metrics": {
            "e-f2e04fc7aa72": {
                "order": 5,
                "displayName": "User5"
            },
            "bb202c11-5d44-48a": {
                "order": 1,
                "displayName": "User2"
            },
            "a0d6e3afa2b5": {
                "order": 3,
                "displayName": "User3"
            },
            "46af13d22392856da": {
                "order": 4,
                "displayName": "User4"
            },
            "0c5f43cdd73b9cf623": {
                "order": 2,
                "displayName": "User2"
            }
        }
    }
}
如何将此json排序为如下所示:

var json = {
    "users": {
        "metrics": {
            "bb202c11-5d44-48a": {
                "order": 1,
                "displayName": "User1"
            },
            "0c5f43cdd73b9cf623": {
                "order": 2,
                "displayName": "User2"
            },
            "a0d6e3afa2b5": {
                "order": 3,
                "displayName": "User3"
            },
            "46af13d22392856da": {
                "order": 4,
                "displayName": "User4"
            },
            "e-f2e04fc7aa72": {
                "order": 5,
                "displayName": "User5"
            },

        }
    }
}

您可以使用例如for.迭代度量的属性。。在中,并创建用户列表。然后就可以分类了

var users = []
var metrics = json.users.metrics

for (var userId in metrics) {
    var user = metrics[userId];
    user["userId"] = userId;
    users.push(user);
}

但是,按照您期望的格式,您不能这样做,因为据我所知,对象属性无法排序。

您不能对对象排序,但可以从中创建排序列表

var metricsSorted = [];
for (var key in json.users.metrics) {
    var metric = json.users.metrics[key];
    metric.id = key;
    metricsSorted.push(metric);
}
metricsSorted.sort(function(a, b) {
    return a.order - b.order;
});
console.log(metricsSorted);

首先,不能对对象进行排序,可以将目标json定义为数组,以便对其进行排序

var users = []
var metrics = json.users.metrics

for (var userId in metrics) {
    var user = metrics[userId];
    user["userId"] = userId;
    users.push(user);
}
比方说,您可以将目标json定义为:

var json = {
    "users": {
        "metrics": [
            {   "id": "bb202c11-5d44-48a",
                "order": 1,
                "displayName": "User1"
            },
            {   "id": "0c5f43cdd73b9cf623",
                "order": 2,
                "displayName": "User2"
            },
            {   "id": "a0d6e3afa2b5",
                "order": 3,
                "displayName": "User3"
            },
            {   "id": "46af13d22392856da",
                "order": 4,
                "displayName": "User4"
            },
            {   "id": "e-f2e04fc7aa72",
                "order": 5,
                "displayName": "User5"
            }
        ]
    }
}
然后,您可以使用下面的代码将原始json排序到其中,如下所示:

var metrics = []
for(var id in json.users.metrics){
    metrics.push({"id": id,"order":json.users.metrics[id].order,"displayName":json.users.metrics[id].displayName})
}
metrics.sort(function(a,b) { return a.order - b.order } );

json.users.metrics = metrics

//console.log(JSON.stringify(json))

您不能对其进行排序,因为Objects中没有顺序。您可以对数组进行排序,而不是对对象进行排序。如果在将此数据转换为JSON之前从数据库表中获取此数据,您可以使用order BY在SQL查询中对其进行排序/排序。我从另一台服务器和不同的项目中获取JSON。因此不可能在后端更改json。如果以其他方式,它可能在前端更改?它不可能在后端更改json格式。在frontent中还有其他方法可以更改json格式吗?我编辑了我的答案,因此您可以从收到的对象创建一个列表。