通过Javascript中的键按字母顺序对对象进行排序
我有一个嵌套对象,我想按字母顺序排序通过Javascript中的键按字母顺序对对象进行排序,javascript,sorting,object,foreach,Javascript,Sorting,Object,Foreach,我有一个嵌套对象,我想按字母顺序排序 var obj = { 'ABCD' : { 'E' : {}, 'R' : {}, 'A' : {}, 'E' : {} }, 'WXYZ' : { 'F' : {}, 'M' : {}, 'G' : {}, 'A' : {} }, 'MNOP' : { 'A' : {}, 'H' : {}, 'B' : {}, 'C' : {} },
var obj = {
'ABCD' : {
'E' : {},
'R' : {},
'A' : {},
'E' : {}
},
'WXYZ' : {
'F' : {},
'M' : {},
'G' : {},
'A' : {}
},
'MNOP' : {
'A' : {},
'H' : {},
'B' : {},
'C' : {}
},
'EFGH' : {
'D' : {},
'C' : {},
'B' : {},
'E' : {}
}
}
我希望输出是这样的-
{
'ABCD' : {
'A' : {},
'E' : {},
'E' : {},
'R' : {}
},
'EFGH' : {
'B' : {},
'C' : {},
'D' : {},
'E' : {}
},
'MNOP' : {
'A' : {},
'B' : {},
'C' : {},
'H' : {}
},
'WXYZ' : {
'A' : {},
'F' : {},
'G' : {},
'M' : {}
}
}
我已经编写了对直接键进行排序的代码,但我不知道如何对这些键中的其他对象进行排序,
这是我的密码-
var sorted = {}
Object.keys(obj).sort().forEach(function(val) {
sorted[val] = obj[val]
})
请就如何实现上述输出提出建议。谢谢。首先分配一个空对象,然后添加排序属性
var排序={}
Object.keys(obj.sort().forEach(函数(val)){
已排序的[val]={}
Object.keys(obj[val]).sort().forEach(函数(val2){
排序的[val][val2]=obj[val][val2]
})
})
完整代码段:
var obj={
“ABCD”:{
'E':{},
'R':{},
'A':{},
'E':{}
},
“WXYZ”:{
'F':{},
'M':{},
'G':{},
'A':{}
},
“MNOP”:{
'A':{},
'H':{},
'B':{},
'C':{}
},
“EFGH”:{
'D':{},
‘C’:{},
'B':{},
'E':{}
}
}
var排序={}
Object.keys(obj.sort().forEach(函数(val)){
已排序的[val]={}
Object.keys(obj[val]).sort().forEach(函数(val2){
排序的[val][val2]=obj[val][val2]
})
})
log(排序)
您可以对嵌套对象采用递归方法
const
sort=o=>Object.assign({},…)对象
.钥匙(o)
.sort()
.map(k=>({[k]:o[k]&&typeof o[k]=='object'?排序(o[k]):o[k]}))
);
var obj={ABCD:{E:{},R:{},A:{},WXYZ:{F:{},M:{},G:{},A:{},MNOP:{A:{},H:{},B:{},C:{},EFGH:{D:{},C:{},B:{},
排序=排序(obj);
控制台日志(已排序)代码>
.as控制台包装{最大高度:100%!重要;顶部:0;}
递归版本
function sortedFunc(inputObj){
var sorted = {}
//get keys
const keys = Object.keys(inputObj).sort();
keys.forEach( key => {
if(inputObj[key] instanceof Object){
sorted[key] = sortedFunc(inputObj[key]);
} else {
sorted[key] = inputObj[key];
}
});
return sorted;
}
可能的重复项您可以尝试使用数组代替。注意:如果您有任何整数键,则无论键添加到对象属性的顺序如何,它们都将被排序到顶部。无法删除对象属性ordered@FZs它们可能在ES6中。顺序是:1)整数键2)所有其他字符串键,按照它们添加的顺序3)所有符号键@adiga Ok,但是否可以在“所有其他字符串键”中对键进行排序?有一秒钟,我以为你在扩展对象:…对象
是的,是的,缩进让我感到困惑