2013-02-21 74 views
4

我試圖訪問字符串"key1.key2"作爲對象的屬性。 例如:將字符串轉換爲javascript中的嵌套對象的屬性

var obj = { key1 : {key2 : "value1", key3 : "value2"}}; 
var attr_string = "key1.key2"; 

可變attr_string是屬性在由"."加入嵌套對象的字符串。它可以像"key1.key2.key3.key4..."

任何深度的我想是這樣obj.attr_string給予的obj["key1"]["key2"]值是"value1"

如何實現這一目標?

+0

的兩個反圖形的一個組合:'與(OBJ)VAR結果= EVAL(ATTR); '。 – dfsq 2013-02-21 12:31:47

+1

[使用字符串鍵訪問嵌套的JavaScript對象]可能的重複(http://stackoverflow.com/questions/6491463/accessing-nested-javascript-objects-with-string-key) – 2013-02-21 12:35:51

+1

請閱讀:['沒有這樣的東西作爲「JSON對象」](http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/)。你有什麼是一個正常的JavaScript對象。 – 2013-02-21 12:36:33

回答

1

感謝@dfsq記住我使用eval

以下是我期待的一種評估對象字符串屬性的簡單方法。

var obj = { key1 : {key2 : "value1", key3 : "value2"}}; 
var attr_string = "key1.key2"; 

var result = eval("obj."+attr_string); 

沒有必要分裂與"."的字符串,然後把它在一個循環中獲得的價值。 eval可以用JavaScript代碼語句評估任何字符串。

0
var target = obj; 
for (var part in attr_string.split(".")) 
    target = target[part]; 
0

這是你在追求什麼?

var obj = { key1: { key2A: 'x', key2B: { key3: 'y' } } }, 
    attr_string = 'key1.key2B.key3', 

    find = function (obj, str) { 

     var index = 0, 
      arr = str.split('.'); 

     if (arr.length) { 
      while (typeof obj === 'object' && arr[ index ] in obj) { 
       obj = obj[ arr[ index ] ]; 
       index++; 
      } 
     } 

     return obj; 

    }; 


find(obj, attr_string); // Returns 'y' 
0

固定起來@約翰的回答爲可重複使用的函數(我將使用自己)

function nested(obj, attrString){ 
    var path = attrString.split("."); 
    for (var i in path){ 
     obj = obj[path[i]]; 
    } 
    return obj; 
} 

// test it out... 
x = {a:{b:{c:"happy days"}}}; 
console.log(nested(x, 'a')); 
console.log(nested(x, 'a.b')); 
console.log(nested(x, 'a.b.c')); 
相關問題