javascript - 通过Javascript中的键按字母顺序对对象的对象进行排序

标签 javascript sorting object foreach

我有这个嵌套对象,我想按字母顺序排序,

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]
})

请建议我如何实现上述输出。谢谢。

最佳答案

您可以对嵌套对象采用递归方法。

const
    sort = o => Object.assign({}, ...Object
        .keys(o)
        .sort()
        .map(k => ({ [k]: o[k] && typeof o[k] === 'object' ? sort(o[k]) : o[k] }))
    );

var obj = { ABCD: { E: { }, R: { }, A: { } }, WXYZ: { F: { }, M: { }, G: { }, A: { } }, MNOP: { A: { }, H: { }, B: { }, C: { } }, EFGH: { D: { }, C: { }, B: { }, E: { } } },
    sorted = sort(obj);

console.log(sorted);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 通过Javascript中的键按字母顺序对对象的对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54860983/

相关文章:

javascript - JS 编码 HTML 标签不起作用

javascript - 如果网站刷新,则停止 php 调用的 mysql 服务器运行

javascript - 将字符串写入 Hrefs 但忽略某些类

javascript - 在jsp中成功提交表单后清除表单字段

javascript - 获取 javascript 函数对象的参数计数(甚至名称)

Javascript 通过对象搜索

mysql - 按表中出现的次数排序

javascript - Javascript 中的地址数组排序

javascript - 从数组值开始按升序追加元素

java - 开始Java多态子类父类(super class)