2017-03-14 113 views
0

我有一個數組,其中包含對象的所有值的屬性。 這樣的事情。如何在javascript中獲取對象值

var act=["name.first","age"]; 
var ab={name:{first:"roli",last:"agrawal"},age:24}; 
console.log(ab[act[0]]); 

如何使用行爲值訪問對象的值?

+0

如果屬性名稱是一個數組,你怎麼知道你要使用的數組項?如果你想使用所有的數組項,那麼結果是從哪裏來的? (大概不是真的只是在控制檯上。) – nnnnnn

+0

我想使用所有的,但現在嘗試與第零個元素 –

+0

我已經將這與一個老問題,這個問題的答案涵蓋了「name.first」嵌套屬性部分的一個屬性。要訪問數組中指定的所有屬性,只需在循環中執行相同的操作。 (類似的答案的另一個問題是[這裏](http://stackoverflow.com/questions/8817394/javascript-get-deep-value-from-object-by-passing-path-to-it-as-string)。 ) – nnnnnn

回答

0

試試這個簡單的

var ab = {first: 'a', 
      last: 'b', 
      age: '24'} 

var ac = []; 
ac.push(ab); 

console.log(ac[0]); 
+0

感謝您的解決方案,但我不想更改我的數據結構。 –

2

你必須字符串act[0]拆分爲您的對象不包含任何鍵名爲"name.first"

var act=["name.first","age"]; 
 
var ab={name:{first:"roli",last:"agrawal"},age:24}; 
 
var key = act[0].split('.'); 
 
console.log(ab[key[0]][key[1]]);

0

同意,它不是」本地支持,但您可以使用一個小整流器函數來遍歷傳遞的路徑並獲取值。這也許可以優化,但工作原理:

var act=["name.first","age"]; 
 
var ab={name:{first:"roli",last:"agrawal"},age:24}; 
 

 
function getProperty(inputObj, path) { 
 

 
    var pathArr = path.split('.'); 
 
    var currentObjLevelOrOutput; 
 
    var i; 
 
    
 
    if (pathArr.length > 1) { 
 
    currentObjLevelOrOutput = inputObj; 
 
    for (i=0; i < pathArr.length; i++) { 
 
     currentObjLevelOrOutput = currentObjLevelOrOutput[pathArr[i]]; 
 
    } 
 
    } else { 
 
    currentObjLevelOrOutput = inputObj[path]; 
 
    } 
 
    
 
    return currentObjLevelOrOutput; 
 

 
} 
 

 
console.log(getProperty(ab,act[0]));