正如很多评论中提到的那样,您不要“排序”一个对象。排序意味着顺序,意味着一个集合,意味着一个数据结构。
所以首先,你需要一个对象数组。所以通过迭代键将它们提取到数组中。然后使用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))。
这不是一个数组... – 2015-04-02 14:44:58
你没有一个数组。你想如何分类这个对象,购买它的属性/键(166,147)?检查[这个答案](http://stackoverflow.com/questions/5467129/sort-javascript-object-by-key)或[this](http://stackoverflow.com/questions/1359761/sorting-a-javascript -object按属性名称)。 – skobaljic 2015-04-02 14:45:08
这是一个对象,而不是一个数组。你不会像那样处理json。 json是一种传输编码格式。你将它解码为本地结构(例如JS对象,PHP数组,等等),然后对其进行排序。然后你重新将已排序的结构重新编码为json。 – 2015-04-02 14:46:19