2016-05-04 17 views
0

brauchen etwas Hilfe.Erstellen String aus JSON-Objekt KEYS - Vanille JavaScript oder Lodash

Ich habe ein JSON-Objekt und ich möchte ein String-Array mit Schlüsseln des Objekts erstellen.

json Objekt

{ 
    "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 ..." 
    } 
} 

Ich möchte ein Array erzeugen, die wie folgt aussieht:

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', 
]; 

Nicht alle Werte enthalten ist, aber ich denke, Sie bekommen die Idee. Die Hauptsache ist, dass ich weiß, dass ich "FEATURES" im Objekt habe und ich den Feature-Namen "APP_TEAM" kenne, aber ich kenne die Verschachtelungsebene in diesem Feature nicht.

Hoffe jemand kann mir helfen.

+2

Sollte recht einfach mit einer rekursiven Funktionsaufruf auf jedem verschachteltes Objekt. Was hast du bisher? –

Antwort

1

Rekursion:

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

auf dem obigen Objekt zurückgibt:

[ 
    "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

Schön gemacht. Alternativ können Sie auch loadash für bessere Lesbarkeit und Leistung verwenden. – nick

Verwandte Themen