从 JSON 对象 KEYS 创建字符串 - Vanilla JavaScript 或 lodash

Create String From JSON object KEYS - Vanilla JavaScript or lodash

需要一些帮助。

我有一个 json 对象,我想用该对象的键创建一个字符串数组。

json 对象

{
    "FEATURES": {
        "APP_DASHBOARD": {
            "MENU_TITLE": "Dashboard",
            "HEAD_TITLE": "Dashboard",
            "HEAD_DESC": "Welcome to briteplan"
        },
        "APP_TEAM": {
            "MENU_TITLE": "Teams",
            "HEAD_TITLE": "Teams",
            "HEAD_DESC": "",
            "TOOL_TIPS": {
                "TEAM_REFRESH": "Refresh teams",
                "TEAM_ADD": "Add new team",
                "TEAM_EDIT": "Edit team",
                "TEAM_REMOVE": "Remove team",
                "MEMBER_REMOVE" : "Remove team member",
                "MEMBER_LEAD" : "Team lead",
                "AVL_MEMBERS_REFRESH" : "Refresh available members"
            },
            "CONTENT": {
                "TEAMS_TITLE": "Teams",
                "MEMBERS_TITLE": "Members",
                "AVL_MEMBERS_TITLE": "Available team members"
            }
        }
    },
    "GENERAL": {
        "SEARCH_PLACEHOLDER": "Search ..."
    }
}

我想生成一个如下所示的数组:

var myArray = [
'FEATURES.APP_TEAM.MENU_TITLE',
'FEATURES.APP_TEAM.HEAD_TITLE',
'FEATURES.APP_TEAM.HEAD_DESC',
'FEATURES.APP_TEAM.TOOL_TIPS.TEAM_REFRESH',
'FEATURES.APP_TEAM.TOOL_TIPS.TEAM_ADD',
'FEATURES.APP_TEAM.TOOL_TIPS.TEAM_EDIT',
'FEATURES.APP_TEAM.TOOL_TIPS.TEAM_REMOVE',
];

并未包含所有值,但我想您明白了。最主要的是我会知道我在对象中有 "FEATURES" 并且我会知道功能名称 "APP_TEAM",但我不知道该功能中的嵌套级别。

希望有人能帮助我。

递归:

function getKeys (o) {
  var keys = [];
  for (var prop in o) {
    if(o.hasOwnProperty(prop)) {
      if(typeof o[prop] === 'object') {
        getKeys(o[prop]).forEach(function (nestedProp) {
          keys.push(prop + '.' + nestedProp);
        });
      }
      else {
        keys.push(prop);
      }
    }
  }
  return keys;
}

在上述对象上,returns:

[
  "FEATURES.APP_DASHBOARD.MENU_TITLE",
  "FEATURES.APP_DASHBOARD.HEAD_TITLE",
  "FEATURES.APP_DASHBOARD.HEAD_DESC",
  "FEATURES.APP_TEAM.MENU_TITLE",
  "FEATURES.APP_TEAM.HEAD_TITLE",
  "FEATURES.APP_TEAM.HEAD_DESC",
  "FEATURES.APP_TEAM.TOOL_TIPS.TEAM_REFRESH",
  "FEATURES.APP_TEAM.TOOL_TIPS.TEAM_ADD",
  "FEATURES.APP_TEAM.TOOL_TIPS.TEAM_EDIT",
  "FEATURES.APP_TEAM.TOOL_TIPS.TEAM_REMOVE",
  "FEATURES.APP_TEAM.TOOL_TIPS.MEMBER_REMOVE",
  "FEATURES.APP_TEAM.TOOL_TIPS.MEMBER_LEAD",
  "FEATURES.APP_TEAM.TOOL_TIPS.AVL_MEMBERS_REFRESH",
  "FEATURES.APP_TEAM.CONTENT.TEAMS_TITLE",
  "FEATURES.APP_TEAM.CONTENT.MEMBERS_TITLE",
  "FEATURES.APP_TEAM.CONTENT.AVL_MEMBERS_TITLE",
  "GENERAL.SEARCH_PLACEHOLDER"
]