2017-11-30 1 views
1

json 데이터 ID에 종속 된 두 개의 다른 json 배열에서 동일한 특정 json 객체를 병합하고 싶습니다.병합 두 개의 다른 json 배열에있는 동일한 특정 json 객체

JSON 데이터 세트 1

{ 
    "Product":[ 
       { 
       "product_id": "123", 
       "location_id": "222", 
       "product_code": "abc", 
       }, 
       { 
       "product_id": "456", 
       "location_id": "111", 
       "product_code": "xyz", 
       } 
      ] 
} 

JSON 데이터 결과는 지금까지 코드 내가했던되는이

{ 
    "Product":[ 

       { 
        "product_id": "456", 
        "location_id": "111", 
        "product_code": "xyz", 
        "location_name": "alpha" 
       }, 
       { 
        "product_id": "123", 
        "location_id": "222", 
        "product_code": "abc", 
        "location_name": "tango" 
       } 
      ] 
} 

같은 것 2

{ 
    "Location":[ 

      { 
       "location_id": 111, 
       "location_name": "alpha" 
      }, 
      { 
       "location_id": 222, 
       "location_name": "tango" 
      } 


     ] 
} 

설정 .

var finalJson = {}; 

        _.each(_.keys(productArray,locationArray), function(key) { 
         finalJson[key] = _.flatten(_.zip(productArray[key], locationArray[key])); 
        }); 

        console.log(finalJson); 
+0

죄송합니다. 코드 – Jon

+0

을 업데이트했습니다. 예, 병합 결과는 동일한 위치 ID를 기반으로해야합니다. – Jon

+0

맞습니다. 그래서'var result = {Product : locationArray.map ((location, index) => String (location.location_id) => Object.assign (location, productArray.find (product => String (product.location_id)))))};' –

답변

2

간단한 알고리즘은 다음과 같이 두 배열을 통해 이동하는 중첩 루프를 사용하여 수 :

let allProducts = [{ 
 
    "product_id": "123", 
 
    "location_id": "222", 
 
    "product_code": "abc", 
 
    }, 
 
    { 
 
    "product_id": "456", 
 
    "location_id": "111", 
 
    "product_code": "xyz", 
 
    } 
 
]; 
 

 

 
let allLocations = [ 
 

 
    { 
 
    "location_id": 111, 
 
    "location_name": "alpha" 
 
    }, 
 
    { 
 
    "location_id": 222, 
 
    "location_name": "tango" 
 
    } 
 
]; 
 

 
let result = allProducts.map((product) => { 
 
    let matchingLocation = allLocations.find((location) => { 
 
    return location.location_id == product.location_id; 
 
    }); 
 
    return Object.assign(product, matchingLocation); 
 
}) 
 

 
console.log(result);

+1

고맙습니다. 코드의 단순함을 좋아했습니다 :) – Jon

1

키로 위치 ID를 사용하여 위치의 해시 맵을 확인한 다음 제품의 배열을 반복

let arr1 = { 
 
    "Product": [{ 
 
    "product_id": "123", 
 
    "location_id": "222", 
 
    "product_code": "abc", 
 
    }, { 
 
    "product_id": "456", 
 
    "location_id": "111", 
 
    "product_code": "xyz", 
 
    }] 
 
} 
 

 
let arr2 = { 
 
    "Location": [ 
 
    { 
 
     "location_id": 111, 
 
     "location_name": "alpha" 
 
    }, { 
 
     "location_id": 222, 
 
     "location_name": "tango" 
 
    } 
 
    ] 
 
} 
 
let locIds= _.keyBy(arr2.Location, 'location_id'); 
 
_.each(arr1.Product, (o) => _.assign(o, locIds[o.location_id])); 
 

 
console.log(arr1.Product)
.as-console-wrapper{max-height:100%!important}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>