我目前正在努力解決JavaScript問題。我想通過傳入原始對象以及一組路徑到我想要的屬性來返回多級屬性以及其中包含的每個變量。訪問多級屬性及其屬性的完整路徑
舉例來說,如果我有以下對象:
obj = {
product: {
candidate: {
id: 10,
reference: "test",
count: 4,
steps: 10
}
}
}
我希望能夠調用一個方法:
getVarPath(obj, ["product.candidate.ID", "product.candidate.reference"])
然後把它返回一個對象,在經過每一個變量數組,它的原始結構。因此,這將返回一個對象看起來像這樣:
{
product: {
candidate: {
id: 10,
reference: "test"
}
}
}
我有在那一刻我的本地解決方案這個工作(在一個字符串,而不是目前的數組傳遞)。
目前的解決方案是非常可怕的,但我期待着改進它,所以如果任何人都可以想到一個更好的方法。 再一次,這是非常可怕的,但我正在尋求改善它。但它的工作:
var getVarPath = function(obj, keys){
var elements = keys.split("."),
evalStr = "",
objStr = "obj",
newObjStr = "newObj",
newObj = {};
if(elements.length > 1){
elements.forEach(function(key, index){
// first append a property accessor at the end of the eval string
evalStr = evalStr + "['" + key + "']";
// if we're at the last element, we've reached the value, so assign it
if(index === elements.length -1){
eval(newObjStr + evalStr + " = " + objStr + evalStr);
}
else {
// if we're not at the last, we're at an object level
// if the nested object doesn't exist yet, create it
if(!eval(newObjStr + evalStr)){
eval(newObjStr + evalStr + " = {};");
}
}
});
}
return newObj;
}
你嘗試過什麼至今? –
我編輯了我目前的工作解決方案的問題,但我不喜歡我使用eval的事實,希望使它更好一點 – TomDavies