我有一个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属性对此对象进行排序?
答案 0 :(得分:1)
这应该让你接近你想要的。它不漂亮,但应该指向正确的方向。
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});
答案 1 :(得分:1)
正如许多评论中所提到的,你不要“排序”一个对象。排序意味着顺序,暗示集合,暗示数据结构。
首先,首先需要一个对象数组。因此,通过遍历键将它们提取到数组中。然后使用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))。