2015-04-07 24 views
-3

我有一個字符串,其工作作爲一個「路徑」爲JavaScript對象的某個屬性的數組:向下鑽取Javascript對象使用數組

var car = { 
"owner": "Joe", 
"model": { 
    name: "Ford", 
    "manufacturer": { 
     "founder": "Henry Ford" 
    } 
} 
}; 

var address = ["model", "manufacturer", "founder"]; 

我想寫這將使用該地址的功能找到位於路徑盡頭的物體的屬性,例如,返回「亨利福特」。我希望函數能夠處理任意長度的地址。這個函數會是什麼樣子?

+0

[如何使用格式化字符串訪問JavaScript對象中的SUB屬性?](http://stackoverflow.com/questions/26513905/how-to-use-a-formatted-string-to- access-sub-properties-in-a-javascript-object),但我知道我也見過其他人。 – Mathletics

+1

儘管這不是可取的,你可以做'eval('car。'+ address.join('。'))' –

回答

0

您可以.reduce()

var value = address.reduce(function(o, name) { return o && o[name]; }, car); 

做的.reduce()功能與最初的「蓄電池」的價值,這將是這裏的car對象開始關閉。它遍歷數組,傳遞每個值並期望返回下一個累加器值。每個步驟只是查找屬性值並將其返回,或者累加器本身就是假的。

0

的Try ...

function getValue(ob, address) { 
    result = ob; 
    for (var i=0,len=address.length; i<len; i++) { 
    result = result[address[i]]; 
    } 
    return result; 
} 

這應該在地址列表的末尾返回的對象或值。

1

這將處理搜索失敗的情況。另外,從查看代碼很容易理解。

輸入:對象,陣列

輸出:發現鍵,否則返回null

function searchObject(root, pathArray) { 
    var node = root; 
    for(var index in pathArray) { 
     key = pathArray[index]; 
     if(key in node) { 
      node = node[key]; 
     } else { 
      node = null; 
      break; 
     } 
    } 
    return node; 
} 

實施例:

var car = { 
"owner": "Joe", 
"model": { 
    name: "Ford", 
    "manufacturer": { 
     "founder": "Henry Ford" 
    } 
} 
}; 

var address = ["model", "manufacturer", "founder"]; 

然後searchObject(car, address)返回「亨利福特」。