2015-11-02 55 views
0

這裏得到的是一些代碼,我有:通過密鑰列表獲取嵌套鍵順序

// "iterable" is a Map 
iterable.forEach((definition, schemaKey) => { 
    let keyToGet = schemaKey.split('.'); 
}); 

keyToGet包含嵌套鍵我想在排序的序列得到的一個列表。也就是說,如果我有一個用戶對象,

{ 
    profile: { 
    name: { full: "Cat Man" } 
    } 
} 

而且我想用['profile', 'name', full]訪問profile.name.full。這有可能使用這個值列表來獲取值嗎?

+0

'這是可能獲得使用此值列表值'是的,當然它是什麼?。您可以使用括號表示依次獲取每個屬性。 –

+3

[JavaScript對象:通過名稱作爲字符串訪問變量屬性]可能的副本(http://stackoverflow.com/questions/4255472/javascript-object-access-variable-property-by-name-as-string)或者可能[使用字符串鍵訪問嵌套JavaScript對象](http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key) –

回答

1

你可以做一個遞歸函數,如果找到了鍵,就向下傳遞該對象,如果它到達數組的末尾,最後返回該值。這將返回-1,如果關鍵是沒有找到:

function getFromArr(obj, arr){ 
 
\t function travelDown(current,index){ 
 
    \t if(current.hasOwnProperty(arr[index])){ 
 
     \t if(index+1 == arr.length){ 
 
      \t return current[arr[index]] 
 
      }else{ 
 
      \t return travelDown(current[arr[index]], index+1) 
 
      } 
 
     }else{ 
 
     \t return -1; 
 
     } 
 
    } 
 
    return travelDown(obj, 0) 
 
} 
 

 
var obj ={ 
 
    profile: { 
 
    name: { full: "Cat Man" } 
 
    } 
 
} 
 
console.log(getFromArr(obj,["profile", "name", "full"])) // Cat Man 
 
console.log(getFromArr(obj,["profile", "name"])) // {full: "Cat Man"} 
 
console.log(getFromArr(obj,["profile", "name", "nonexistant"])) // -1