1
var v1 = "['a']";
var v2 = "['b']['c']";
var obj = {a: 'a', b: {c: "['b']['c']"}};
是否有可能使用 'V1' 或 'V2' 等關於 'OBJ' 的方法?我需要它的API,因爲我不知道我應該解析什麼。它可以是obj ['a']或obj ['b'] ['c']。任何解決方案
var v1 = "['a']";
var v2 = "['b']['c']";
var obj = {a: 'a', b: {c: "['b']['c']"}};
是否有可能使用 'V1' 或 'V2' 等關於 'OBJ' 的方法?我需要它的API,因爲我不知道我應該解析什麼。它可以是obj ['a']或obj ['b'] ['c']。任何解決方案
下面是我正在談論的一個示例,使用解析字符串輸入並查找相應元素的函數來擴展對象。
這裏一個很大的警告是我懶惰的處理引號,所以你需要擺弄一下來處理單引號和雙引號。我還沒有進行過廣泛的測試,但是我認爲當對象沒有匹配時它會返回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 />');
如果你認爲你可能會使用它,但有什麼事,你不知道有,發表評論,我會添加一些澄清。
不,這是不可能的。你需要知道你正在尋找的密鑰的完整路徑。考慮扁平化結構或使用ES6映射。 –
你可以用一個函數來擴展obj,該函數接受一個字符串作爲參數(即v1,v2),然後解析它。 – Mic