2016-07-28 38 views
1

我想在javascript中的方法獲取字符串作爲參數,並從嵌套對象返回一個值,就像爲:爲您的使用情況如何通過一個字符串作爲括號表示法在JavaScript中嵌套對象?

var obj = { 
 
    place: { 
 
    cuntry: 'Iran', 
 
    city: 'Tehran', 
 
    block: 68, 
 
    info: { 
 
    name :'Saeid', 
 
     age: 22 
 
    } 
 
    } 
 
}; 
 

 
function getValue(st) { 
 
    // st: 'place[info][name]' 
 
    return obj['place']['info']['name'] // or obj.place.info.name 
 
}

+0

參數'st'數據格式是否可以更改? –

+0

不能改變'st'的數據格式:) – SAlidadi

+0

我可以在''''之前''''之後插入'''也是 – SAlidadi

回答

1

一個可能的解決方案:

function getValue(st, obj) { 
    return st.replace(/\[([^\]]+)]/g, '.$1').split('.').reduce(function(o, p) { 
     return o[p]; 
    }, obj); 
} 

console.log(getValue('place[info][name]', obj)); // "Saeid" 
console.log(getValue('place.info.age', obj));  // 22 
1

你能以「['a'] ['b'] ['c']」的形式得到你的輸入嗎?

function getValue(st) { 
    // st: "['place']['info']['name']" 
    return eval("obj"+st); 
} 

您可以將轉換應用於任何字符串並獲得結果。

編輯:

不要直接在您的代碼庫使用eval。它的邪惡!

+0

'eval'永遠不會是最好的解決方案,不幸的是 – VisioN

+0

那是真的,但是問題是我見過的最不尋常的一個 – footy

+0

我見過這樣的,甚至回答了一個:http://stackoverflow.com/a/13719799/1249581。有趣,但我甚至在工作中使用了一些項目中的代碼 – VisioN

相關問題