2016-01-11 35 views
1

實施例:如何在JavaScript中使用一些字符串參數?

var v1 = "['a']"; 
var v2 = "['b']['c']"; 
var obj = {a: 'a', b: {c: "['b']['c']"}}; 

是否有可能使用 'V1' 或 'V2' 等關於 'OBJ' 的方法?我需要它的API,因爲我不知道我應該解析什麼。它可以是obj ['a']或obj ['b'] ['c']。任何解決方案

+1

不,這是不可能的。你需要知道你正在尋找的密鑰的完整路徑。考慮扁平化結構或使用ES6映射。 –

+0

你可以用一個函數來擴展obj,該函數接受一個字符串作爲參數(即v1,v2),然後解析它。 – Mic

回答

1

下面是我正在談論的一個示例,使用解析字符串輸入並查找相應元素的函數來擴展對象。

這裏一個很大的警告是我懶惰的處理引號,所以你需要擺弄一下來處理單引號和雙引號。我還沒有進行過廣泛的測試,但是我認爲當對象沒有匹配時它會返回undefined。

var v1 = "['a']"; 
 
var v2 = "['b']['c']"; 
 
var obj = { 
 
    getByStr: function(str) { 
 
    var args = str.replace("['", '').replace(new RegExp("'\]" + '$'), '').split("']['"); 
 
    var match = this[args.shift()]; 
 
    while(match !== undefined && args.length > 0) 
 
     match = match[args.shift()]; 
 
    return match; 
 
    }, 
 
    a: 'a', 
 
    b: { 
 
    c: "['b']['c']" 
 
    } 
 
}; 
 

 
document.write('v1 -- ' + obj.getByStr(v1) + '<br />'); 
 
document.write('v2 -- ' + obj.getByStr(v2) + '<br />');

如果你認爲你可能會使用它,但有什麼事,你不知道有,發表評論,我會添加一些澄清。

相關問題