对象
var obj = {
uniquestring1:
{
obj1: 'content',
obj2: 'content'
},
uniquestring2:
{
obj1: 'content'
}
}
所以我需要按第一个父元素包含的元素数量对对象进行排序。使用.sort函数对我来说不是一个解决方案,因为我需要维护数组不保留的索引协议。
结果应为:
var obj = {
uniquestring2:
{
obj1: 'content'
},
uniquestring1:
{
obj1: 'content',
obj2: 'content'
}
}
答案 0 :(得分:4)
Javscript对象没有排序顺序,因此无法对它们进行排序。要排序,你必须在某个地方有一个数组,我在你的代码中看不到任何数组。
对象键没有定义的顺序。
您可以按照排序顺序一次性创建包含键引用的并行数组,如下所示:
var obj = {
uniquestring1:
{
obj1: 'content',
obj2: 'content'
},
uniquestring2:
{
obj1: 'content'
}
}
var objOrder = []; // sorted arrays that contains first level keys into obj
var num;
for (var i in obj) {
objOrder.push(i); // get all keys into the array
num = 0;
for (var j in obj[i]) {
++num; // count items in each key object
}
obj[i].keyCnt = num; // save this for later sorting purposes
}
// now sort the parallel array by keyCnt
objOrder.sort(function(a, b) {
return(obj[a].keyCnt - obj[b].keyCnt);
});
然后,要按排序顺序遍历键,您可以这样做:
for (var i = 0; i < sortedOrder.length; i++ ) {
var item = obj[sortedOrder[i]];
// do something with item here
}
答案 1 :(得分:2)
obj
是一个哈希而不是一个数组,所以你不能对它进行排序。例如,obj[0]; // is undefined
。现在,如果你有这个:
var obj = {
uniquestring1:
{
obj1: 'content',
obj2: 'content'
},
uniquestring2:
{
obj1: 'content'
}
};
var arr = [],
for(var i in obj) {
arr.push(obj[i]);
}
arr.sort(function (a, b) {
return Object.keys(a).length - Object.keys(b).length;
})
然后使用Object.keys
进行排序