2016-05-04 14 views
0

は助けが必要です。JSONオブジェクトからの文字列の作成KEYS - バニラJavaScriptまたは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', 
]; 

すべての値が含まれていますが、私はあなたのアイデアを得ると思いますされていません。主なものは、オブジェクトに「機能」があり、機能名「APP_TEAM」がわかりますが、その機能内のネストレベルはわかりません。

誰でも私を助けることができます。

+2

は、すべてのネストされたオブジェクト上の再帰関数呼び出しと、かなり簡単にする必要があります。これまでに何を持っていますか? –

答えて

1

再帰:上記の目的上

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; 
} 

は、返されます。

[ 
    "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" 
] 
+0

うまくやった。代わりに、読みやすさとパフォーマンスを向上させるためにloadashを使用することもできます。 – nick

関連する問題