2017-07-03 107 views
0

是否可以動態獲取子對象的父對象?從本質上講,我試圖完成的所有工作都是動態檢索屬於子對象父級的屬性的值。例如,在下面的JSON,我想提取特定的汽車司機:通過類型腳本從JSON的嵌套對象中獲取子對象的父對象

{ 
     "driver": [ 
      { 
       "id": 1,  | 
       "name": "Bob", |=> this is the parent 
       "age": "34", | 
       "car": [ 
        { 
         "make": "BMW",  | 
         "model": "3.20", | this is the child 
         "colour": "Silver",| 
         "mileage": [ 
          { 
           "total": "350523", 
           "year": [ 
            { 
             "2011": "3535", 
             "2012": "7852", 
             "2013": "8045" 
            } 
           ], 
           "month": [ 
            { 
             "december": "966", 
             "november": "546", 
             "october": "7657" 
            } 
           ] 
          } 
         ] 
        } 
       ] 
     } 
     ] 
    } 
+0

這是作爲孩子的父母。你在找什麼? – Aravind

+0

你能再次檢查問題嗎?我澄清了它 – SuperGirl

+0

你將如何獲得父組件**驅動程序**信息。你在哪裏使用它? – Aravind

回答

0

使用for循環:

for(let parent of data.driver) { 
    for(let car of parent.car) { 
     if(car.make === 'BMW') { 
      // can do what you like with 'parent' 
     } 
    } 
} 

使用filter()find()(標準JavaScript):

drivers_who_drive_bwm = data.driver.filter((parent) => { 
    // find() will give -1, if no car was found that matched 
    // car.make === 'BWM' 
    return parent['car'].find((car) => car.make === 'BWM') !== -1 
}) 

另外:

你的命名約定是混亂。我期望driver.car是一輛單車,在你的代碼中它是一系列汽車。如果它總是包含單車,那麼最好不要使用數組。相同的.driver。更好的密鑰將是.drivers指示多個驅動程序。 (但也許它是XML轉換爲JSON,在這種情況下,你堅持嗎?)

+0

這就是我正在尋找的,謝謝 – SuperGirl

1

無論您選擇何種策略,你將基本上可通過迭代和返回。所以我覺得「最好」的策略是使用你最舒服的方式。

Typescript就是Javascript。所以如果你對Javascript-ey「功能性編程」方式感到滿意,你可以使用Array map &過濾器。

您當然需要處理您未指定的特定於應用程序的邏輯,例如「當不同驅動程序中存在相同品牌/型號時會發生什麼?」。

如果您對功能性編程不滿意,您可以始終創建一系列地圖,然後執行查找。

但是,如果你需要做對,那麼一定要做你喜歡做的事情。

0

要回答這個問題,對象引用只是一個內存位置。父母沒有概念來到這裏。它可能沒有任何父項(只是作爲父項的邏輯思維,所以可能沒有任何其他對象具有參考它的屬性),或者可能很多對象已經指向相同的存儲位置(即通過你的邏輯多個父項)。

1>因此,您可以通過編程將父項引用傳遞給每個子元素。請注意,在這裏你不能通過解析一個JSON字符串來完成,因爲它只包含JSON數據,不能引用爲可分析的。

2>或者嘗試根據您的條件找出包含您的值的子對象的驅動程序對象(即父對象)。你可以在javascript中使用數組函數的filtermap來這樣做。但無論你在做什麼只是迭代和發現。在這種情況下,underscrore js將是一個很好的圖書館使用