自定义javascript对象排序和维护索引关联

Custom javascript object sort and maintain index association

本文关键字:维护 索引 关联 排序 javascript 对象 自定义      更新时间:2023-09-26

对象

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