2014-10-18 2 views
0
  • 하나의 개체 배열 My customerOrder array가 있습니다. 배열의 각 객체에는 customerID가 포함됩니다. 여러 주문에 동일한 고객 ID가있을 수 있습니다.
  • 두 번째 배열 인 고객 배열도 있습니다.
  • 내 목표는 customerOrder 배열의 각 객체를 가져 와서 customerID로 그룹화 된 더 작은 배열로 정렬하여 각 개별 배열을 내 고객 배열의 키/값 쌍의 값으로 만들 수 있습니다.

다음은 두 배열의 각각에있는 개체 중 하나입니다.복잡한 배열을 사용하는 자바 스크립트

 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 –

+0

예제 데이터 입력과 출력을 제공하면 도움이 될 것입니다. –

답변

0

정확하게 이해했다면 결과는 customerID가 키이고 값이 name, city 및이 키에 속하는 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가 런타임 중에 비워 질 수 있다면 조금 더 빨리 수행 할 수 있습니다.

내가 오해가 있거나 그렇지 않은 경우 비평을 게시하십시오.

관련 문제