Javascript 对包含对象的JSON对象进行排序
我有一个对象的json对象,如下所示:Javascript 对包含对象的JSON对象进行排序,javascript,arrays,json,Javascript,Arrays,Json,我有一个对象的json对象,如下所示: { "166": { "name":{"name":"name","val":"matt","order":""}, "props":{"name":"props","val":"1","order":""} }, "147": { "name":{"name":"name","val":"chris","order":"
{
"166":
{
"name":{"name":"name","val":"matt","order":""},
"props":{"name":"props","val":"1","order":""}
},
"147":
{
"name":{"name":"name","val":"chris","order":""},
"props":{"name":"props","val":"4","order":""}
}
}
在JavaScript中,如何根据props对象中的val属性对该对象进行排序?这将使您更接近所需内容。这并不漂亮,但应该为你指明正确的方向
var json =
{
"166":
{
"name":
{
"name":"name",
"val":"matt",
"order":""
},
"props":
{
"name":"props",
"val":"1","order":""
}
},
"147":
{
"name":
{
"name":"name",
"val":"chris",
"order":""
},
"props":
{
"name":"props",
"val":"4",
"order":""
}
}
};
var arr = [];
for (var jsonProperty in json) {
if (json.hasOwnProperty(jsonProperty)) {
var propVal = json[jsonProperty]['props']['val'];
arr.push({val: propVal, obj: json[jsonProperty]});
}
}
var sortedArray = arr.sort(function(a,b){return a.val-b.val});
正如在许多评论中提到的,您不会对对象进行“排序”。排序意味着顺序,意味着集合,意味着数据结构 所以首先,你们需要一个对象数组。因此,通过迭代键将它们提取到数组中。然后使用自定义比较器使用
Array.sort
var objectsToSort = {
"166":
{
"name":{"name":"name","val":"matt","order":""},
"props":{"name":"props","val":"1","order":""}
},
"147":
{
"name":{"name":"name","val":"chris","order":""},
"props":{"name":"props","val":"4","order":""}
}
}
var objects = Object.keys(objectsToSort).map(function (key) {
return objectsToSort[key];
});
objects.sort(function (a, b) {
return a.val - b.val;
});
我注意到val
是数字的字符串表示形式。如果需要数字排序,请将其更改为纯整数或将上面的排序函数更改为使用parseInt
:
objects.sort(function (a, b) {
return parseInt(a.val, 10) - parseInt(b.val, 10);
});
我更喜欢更改实际数据而不是函数,因为每次比较和排序都会运行两次解析,通常是N*log(N)。因此,它将运行2(N*log(N))。这不是一个数组……这里没有数组。您希望如何对该对象进行排序,购买其属性/键(166147)?检查或。这是一个对象,不是数组。你不会像那样处理json。json是一种传输编码格式。您将其解码为本机结构(例如JS对象、PHP数组等等),然后对其进行排序。然后将排序后的结构重新编码为json。您无法对其进行排序,因为无法保证对象键的顺序。对对象的关键帧进行排序毫无意义。如果您依赖对象中键的顺序,那么您所做的是根本错误的。如果您需要对象按特定顺序排列,那么您需要一个数组。如上所述,您的要求是错误的。相反,告诉我们你的目标是什么,我们会告诉你如何正确地完成它。这正是我想要的。非常感谢你的帮助。