Javascript 如何通过嵌套按数字键对对象进行排序?

Javascript 如何通过嵌套按数字键对对象进行排序?,javascript,Javascript,我有一个带有数字键的对象,按某个值分组,这就是它有嵌套的原因: const toSort = { '3': { "key1": "test", "key2": "test", }, 'testVslue': { '1': { "key1": "test", "key2": "test"

我有一个带有数字键的对象,按某个值分组,这就是它有嵌套的原因:

const toSort = {
'3': {
    "key1": "test",
    "key2": "test",
},
'testVslue': {
    '1': {
        "key1": "test",
        "key2": "test",
    },
    '2': {
        "key1": "test",
        "key2": "test",
    },
},
'4': {
    "key1": "test",
    "key2": "test",
},
}

如何按键增长对对象进行排序,尽管存在嵌套,如下所示:

const sorted = {
'testVslue': {
    '1': {
        "key1": "test",
        "key2": "test",
    },
    '2': {
        "key1": "test",
        "key2": "test",
    },
},
'3': {
    "key1": "test",
    "key2": "test",
},
'4': {
    "key1": "test",
    "key2": "test",
},
}

自己的属性密钥:

按以下顺序检索对象所有自身属性的键:

  • 首先,字符串键是整数索引(下一节将解释这些索引),以升序数字顺序排列
  • 然后是所有其他字符串键,按照它们添加到对象的顺序
  • 最后,按符号键添加到对象的顺序显示所有符号键
所以,另一种方法是把它分开

const sortedInteger={};
const sortedString={};
Object.keys(toSort).sort().forEach(函数(键){
如果(isNaN(键)){
sortedString[键]=ToSorted[键];
}
否则{
sortedInteger[键]=ToSorted[键];
}
});
控制台日志(分类字符串);
控制台日志(分拣机);

或者如何使用地图

const sortedintegrary=[];
让sortedMap=newmap()
Object.key(toSort).sort().forEach((key)=>{
如果(isNaN(键)){
sortedMap.set(键,toSort[键])
}
否则{
分类排列。按下(键);
}
});
SortedIndegerary.forEach((键)=>{
sortedMap.set(键,toSort[键])
});
console.log(sortedMap)
//地图{
//“测试值”=>{
//'1':{key1:'test',key2:'test'},
//'2':{key1:'test',key2:'test'}
//     },
//'3'=>{key1:'test',key2:'test'},
//'4'=>{key1:'test',key2:'test'}
//   }

自己的属性密钥:

按以下顺序检索对象所有自身属性的键:

  • 首先,字符串键是整数索引(下一节将解释这些索引),以升序数字顺序排列
  • 然后是所有其他字符串键,按照它们添加到对象的顺序
  • 最后,按符号键添加到对象的顺序显示所有符号键
所以,另一种方法是把它分开

const sortedInteger={};
const sortedString={};
Object.keys(toSort).sort().forEach(函数(键){
如果(isNaN(键)){
sortedString[键]=ToSorted[键];
}
否则{
sortedInteger[键]=ToSorted[键];
}
});
控制台日志(分类字符串);
控制台日志(分拣机);

或者如何使用地图

const sortedintegrary=[];
让sortedMap=newmap()
Object.key(toSort).sort().forEach((key)=>{
如果(isNaN(键)){
sortedMap.set(键,toSort[键])
}
否则{
分类排列。按下(键);
}
});
SortedIndegerary.forEach((键)=>{
sortedMap.set(键,toSort[键])
});
console.log(sortedMap)
//地图{
//“测试值”=>{
//'1':{key1:'test',key2:'test'},
//'2':{key1:'test',key2:'test'}
//     },
//'3'=>{key1:'test',key2:'test'},
//'4'=>{key1:'test',key2:'test'}
//   }

嵌套是否只有一层深?@CKE是的,只有一层有什么用,因为对象的元素可以通过其属性直接访问?根据主机系统的需要,它们的内存分配可能会有所不同。我需要按列表中的顺序可视化数据。如果按字母顺序排序,顺序将是
3 4 testValue
,这样可以吗?嵌套深度是否只有一级?@CKE是,只有一个,因为对象的元素可以通过其属性直接访问,这有什么用?根据主机系统的需要,它们的内存分配可能会有所不同。我需要按列表中的顺序可视化数据。如果按字母顺序排序,顺序将是
3 4 testValue
,可以吗?
console.log(toSort);
// 3 4 testValue

const sorted = {};
Object.keys(toSort).sort().forEach(function(key) {
    sorted[key] = toSort[key];
});

console.log(sorted);
// 3 4 testValue