通过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,但是否可以在“所有其他字符串键”中对键进行排序?有一秒钟,我以为你在扩展对象:
…对象
是的,是的,缩进让我感到困惑