2017-11-04 73 views
-1

不確定我的標題是否描述了我想要正確執行的操作。基本上,我想要一個從包含對象的對象中提取屬性的函數。我將需要遍歷包含同一類的許多對象的各種數組,並提取特定的值。將未知數量的嵌套對象屬性傳遞給函數

myarray1[ 
0: 
    object1 = { 
     objectProp1: { 
      objectProp1Prop1:"Hello", 
      objectProp1Prop2:"Goodbye", 
      objectProp1Prop3:{ 
       objectProp1Prop3Prop1: "Come here", 
       objectProp1Prop3Prop2: "Go away" 
      }, 
     }, 
     objectProp2: "Yo", 
     objectProp3: "Seeya", 
    } 
1: 
    object2 = { same as object1 but with other property values } 
]; 

myarray2[ 
0: { different type of object with a different set of nested properties that the function can extract } 
1: { idem } 
]; 

function extractProperty(objectArray, property) { 
    //How do I write this code? 
    propertyvalue = objectArray.property; 

    return propertyvalue; 
} 

extractProperty(myarray1[0], object.objectProp3) = "Seeya" 
extractProperty(myarray1[0], object.objectProp1.objectProp1Prop1) = "Hello" 
extractProperty(myarray1[0], object.objectProp1.objectProp1Prop3.objectProp1Prop3Prop1) = "Come here" 

在最後的代碼的函數需要能夠遍歷所有數組鍵並創建包含從原來的陣列中的每個對象所選擇的屬性的數組列表,而是我可以管理。這是將需要從數組中的對象中提取的特定屬性發送到我不知道該怎麼做的函數中。

是否有一種通用的方法來將屬性的「路徑」發送到函數中,然後在那裏使用它?怎麼樣?

感謝您的幫助!

+0

不,因爲我不知道如何將需要提取的特定屬性發送到函數中並從那裏使用它。這個問題不是很清楚嗎? –

+0

對不起,我上面的評論是對已經被作者或mods刪除的東西的迴應。 –

回答

-1

你可以嘗試遞歸:

object1 = { 
     objectProp1: { 
      objectProp1Prop1:"Hello", 
      objectProp1Prop2:"Goodbye", 
      objectProp1Prop3:{ 
       objectProp1Prop3Prop1: "Come here", 
       objectProp1Prop3Prop2: "Go away" 
      }, 
     }, 
     objectProp2: "Yo", 
     objectProp3: "Seeya", 
    }; 

object2 = { 
    objectProp1: 'test1', 
    objectProp2: 'test2' 
} 

var myArray = [object1, object2]; 

function getProp(objArray, prop) { 
    for(var key in objArray) { 
     if (key == prop) 
      return objArray[key]; 
     if (typeof objArray[key] == 'object') 
      return getProp(objArray[key], prop); 
    } 
} 

//test 
document.getElementsByTagName('h1')[0].innerHTML = getProp(myArray[0],'objectProp1Prop3Prop1'); 

我加了一個小提琴爲你試試吧:https://jsfiddle.net/afabbro/vrVAP/

-1

看起來像一個分配給我。所以我不會給你代碼,但會解釋方法。

  1. 首先,你需要通過屬性名稱作爲字符串
  2. 在你的功能,你需要分割基於分隔符的字符串,如.
  3. 保持當前對象的引用
  4. 然後遍歷從#2獲得的所有屬性名稱
  5. 從當前對象獲取當前屬性名稱,並用返回的值替換當前對象。
  6. 最後返回當前對象。

注意:您需要在兩者之間添加一些驗證。我已經跳過了這些供你探索;)

+0

謝謝你的回覆。這不是一項任務,而是一個私人項目,作爲一項業餘愛好來教我自己編寫代碼。我會嘗試你的方法,看看我能否理解它! –