自定义javascript对象排序和维护索引关联
Custom javascript object sort and maintain index association
对象
var obj = {
uniquestring1:
{
obj1: 'content',
obj2: 'content'
},
uniquestring2:
{
obj1: 'content'
}
}
所以我需要根据第一个父元素所包含的元素的数量对对象进行排序。使用。sort函数对我来说不是一个解决方案,因为我需要维护数组不保留的索引关联。
结果应该是:
var obj = {
uniquestring2:
{
obj1: 'content'
},
uniquestring1:
{
obj1: 'content',
obj2: 'content'
}
}
javascript对象没有排序顺序,因此无法对其排序。要排序,你必须在某个地方有一个数组,我在你的代码中没有看到数组。
对象键没有定义顺序。
- 如果你只需要有序访问,使用数组。
- 如果您只需要键控访问,请使用对象。
- 如果你需要两者都访问,你可以使用并行数组,但这是一个痛苦的,除非数据没有变化。
可以一次性创建一个并行数组,其中包含按顺序排序的键引用:
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
}
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
相关文章:
- 名称输入的索引
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 按照选项卡索引的顺序循环一个jQuery选择
- 在JavaScript中通过索引从对象数组中获取值
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 在索引.html和应用.js [node.js] 之间共享变量
- 如何为高图中的区域线创建z索引
- 下拉列表在使用z索引放置在前面后停止工作
- 减去两个索引不同但值相同的整数
- 如何通过所选索引(AngularJS)在模态弹出窗口中显示数据
- Javascript:根据对象的嵌套数组中的值,在数组中查找对象的索引
- BackboneJS重新排列集合中模型的最佳方式,同时为每个模型维护0索引的有序属性
- 根据对象属性对 JavaScript 对象进行排序,但维护索引
- 遍历多个数组,组合成单个数组,维护子数组内的索引
- 根据提取的内部文本对节点进行排序,并在jQuery中维护索引关联或破解
- 自定义javascript对象排序和维护索引关联
- 在从Backbone集合中过滤模型时维护索引
- 如何在JQuery计数器中正确维护索引