2017-11-30 18 views
1

jsonデータIDに依存する2つの異なるjson配列に同じ特定のjsonオブジェクトをマージしたいとします。2つの異なるjson配列内の同じ特定のjsonオブジェクトをマージする

JSONデータセット1

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

JSONデータは2

{ 
    "Location":[ 

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


     ] 
} 

を設定する結果がこの

{ 
    "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" 
       } 
      ] 
} 

ようなものになるだろう今のところ、これは私がやったコードです。

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、location)=> String) ))}; ' –

答えて

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>

関連する問題