2014-10-18 49 views
0
  • 我有一個對象數組,我的customerOrder數組。數組中的每個對象都包含一個customerID。多個訂單可以具有相同的客戶ID。
  • 我還有第二個對象數組,我的客戶數組。
  • 我的目標是從customerOrder數組中取出每個對象,並將它們分類到由customerID分組的較小數組中,以便我可以使每個較小的數組成爲我的客戶數組中的鍵/值對中的值。

下面是兩個數組中的每個對象的外觀。使用複雜陣列的Javascript

 customerOrderArray = ({ 
      orderID: '', 
      orderType: '', 
      customerID: '' 
    }) 

    customerArray = ({ 
      ID: '', 
      customerName: '', 
      customerCity: '' 
    }) 

這是我試過的代碼。這導致只有一個orderObject被附加到它迭代的最後一個customerObject。

 for (var k = 0; k < customerOrderArray.length; k++) { 
      for (j = 0; j < customerArray.length; j++) { 

      allJobs = new Array(); 

       if (customerArray[j].ID == customerOrderArray[k].CustomerID) { 

        if("allJobs" in customerArray[j]) { 
         customerArray[j].allJobs.push(customerOrderArray[k]); 
        } 

        else { 

         customerArray[j].allJobs.push(customerOrderArray[k]); 
        } 

        break; 
       } 
      } 
     } 

如果有什麼我可以擴大幫助澄清問題或如果對更廣泛的圖片的解釋可能有助於讓我知道。我可能接近這個問題都是錯誤的。我感謝任何幫助,我可以得到。先謝謝你。

+0

看看Lodash和它的groupBy方法https://lodash.com/docs#groupBy – 2014-10-18 13:41:44

+0

我想,提供一些示例數據輸入和輸出,將有所幫助。 – 2014-10-18 13:41:51

回答

0

如果我理解正確,您希望結果成爲一個對象,其中customerID是一個鍵,值是一個持有屬於此鍵的名稱,城市和allJobs的對象。

var orderLength = customerOrderArray.length, 
    customLength = customerArray.length, 
    customerObject = {}; 

for (var i = 0; i < customLength; i++) { // iterate over customerArray 
    var cAi = customerArray[i], 
     id = cAi.ID, 
     // create an value-object with name, city and an empty allJobs-array 
     val = {name: cAi.customerName, city: cAi.customerCity, allJobs: []}; 

    // iterate over customerOrderArray to find all orders belonging to this id 
    for (var o, j = 0; j < orderLength; j++) { 
     o = customerOrderArray[j]; 
     // if id is the same push this job into allJobs 
     if (o.customerID == id) val.allJobs.push(o); 
    } 
    // insert this customer into customerObject, key is id and value is val 
    customerObject[id] = val; 
} 

所以,如果你有ID爲「user25」一個客戶,並說兩份工作,一起來看看爲customerObject['user25']給出:

{ 
    name: 'Ben', 
    city: 'New York', 
    allJobs: [ 
     {orderId: 123, orderType: 'mail', customerID: 'user25'}, 
     {orderId: 124, orderType: 'phone', customerID: 'user25'} 
    ] 
} 

原來的陣列也不會改變。如果customerOrderArray可能在運行時清空,則可以快一點。

如果我誤解了某些東西或者不適合,請發表評論。