对包含对象的JSON对象进行排序
Sorting a JSON object containing objects
我有一个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":""}
}
}
在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))。
相关文章:
- 如何在节点中进行 Json 对象排序.js
- jQuery.每个对象排序
- Javascript对象排序
- Javascript 对象排序
- Javascript中的JSON对象排序
- jQuery停止对象排序
- 带有下划线排序的对象排序的数组
- JS对象排序日期排序
- JSON对象排序被jQuery或Javascript篡改
- 高级对象排序
- 将json对象排序到嵌套树中
- 按两个不同的条件对数组中的对象排序
- 如何在angular js中使用自定义排序顺序对对象排序
- 在AngularJS的ng-repeat中,使用Underscore/Lodash按值将对象排序为一对数组
- 给定一个对象数组,如何根据深度为n的属性对对象排序
- JavaScript数组对象排序没有按预期工作
- 对数组内的对象排序
- 自定义javascript对象排序和维护索引关联
- Javascript对象排序不工作
- Javascript对象的对象排序