自定义javascript对象排序和维护索引关联
对象自定义javascript对象排序和维护索引关联,javascript,jquery,Javascript,Jquery,对象 var obj = { uniquestring1: { obj1: 'content', obj2: 'content' }, uniquestring2: { obj1: 'content' } } 所以我需要根据第一个父元素包含的元素数量对对象进行排序。使用.sort函数对我来说不是一个解决方案,因为我需要维护数组不保留的索引关联 结果应该是: var obj = { uniquestring2:
var obj = {
uniquestring1:
{
obj1: 'content',
obj2: 'content'
},
uniquestring2:
{
obj1: 'content'
}
}
所以我需要根据第一个父元素包含的元素数量对对象进行排序。使用.sort函数对我来说不是一个解决方案,因为我需要维护数组不保留的索引关联
结果应该是:
var obj = {
uniquestring2:
{
obj1: 'content'
},
uniquestring1:
{
obj1: 'content',
obj2: 'content'
}
}
obj是散列而不是数组,因此无法对其进行排序。例如,obj[0];//没有定义。现在如果你有这个:
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;
})
这样排序就可以了,因为obj是散列而不是数组,所以不能对它进行排序。例如,obj[0];//没有定义。现在如果你有这个:
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;
})
然后,如果脚本对象没有排序顺序,因此无法对其进行排序,则该排序将起作用。要排序,您必须在某个地方有一个数组,而我在代码中没有看到任何数组 对象键没有定义的顺序 如果只需要有序访问,请使用数组。 如果只需要键控访问,请使用对象。 如果两者都需要访问,则可以使用并行阵列,但除非数据不发生更改,否则这是一个难题。 您可以一次性创建一个并行数组,其中包含按如下顺序排序的键引用:
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
}
然后,要按排序顺序遍历关键点,您可以这样做:
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
}
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
}
然后,要按排序顺序遍历关键点,您可以这样做:
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
}
无法对对象的属性进行排序,因为它们不是有序数组。也许您想按特定顺序迭代属性?实现一些排序算法,如果不适合您的情况,请不要使用jquery.sort。无法对对象的属性进行排序,因为它们不是有序数组。也许您想按特定顺序迭代属性?实现一些排序算法,如果不适合您的情况,请不要使用jquery.sort。我当然知道,这就是为什么我在这里要求一个解决办法。@keepwalking:你为什么要找一个解决办法?这个怎么了?如果需要标签,应该将对象包装在另一个对象中:{label:'uniquestring1',value:{obj1:'content',obj2:'content'}请记住,旧浏览器(如IE6-IE8)不支持对象的.keys属性。我当然知道,这就是我在这里要求解决方法的原因。@keepwalking:为什么要寻找解决方法?这有什么问题?如果需要标签,应该将对象包装到另一个对象中:{label:'uniquestring1',value:{obj1:'content',obj2:'content'}请记住,旧浏览器(如IE6-IE8)不支持对象的.keys属性。