Javascript 基于值的Json排序
我有示例json,我需要使用javascript/jquery根据值进行排序。 我在下面添加了示例json代码和预期的输出代码。 例如,使用以下代码:Javascript 基于值的Json排序,javascript,json,Javascript,Json,我有示例json,我需要使用javascript/jquery根据值进行排序。 我在下面添加了示例json代码和预期的输出代码。 例如,使用以下代码: var json = { "users": { "metrics": { "e-f2e04fc7aa72": { "order": 5, "displayName": "User5" },
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格式吗?我编辑了我的答案,因此您可以从收到的对象创建一个列表。