2016-06-27 7 views
1

を2つのJSON配列オブジェクトをマージし、私はいくつかの一般的なフィールドで2つのJSON配列を得ました。しかし、彼らは特定の順序でソートされていません。私はプロパティに基づいてそれらをマージできるようにしたい。共通の特性に基づいて

deepmergeは、他の配列の最初の要素を持つ最初の要素をブラインドマージします。

[ { id: 2, name: 'test1' }, { id: 1, name: 'test2' } ]

私はこれを行うには、任意のライブラリがあるかどうか迷って...手動で他の配列から、一致するノードを検索し、それらをマージし、1つの配列を通して繰り返すことがその可能性を知っています。思考?

+0

はい、すべてが可能ですが、あなたは正確に何をしたいですか? –

+0

@nina 2つのソートされていない配列がありますが、上記のような共通のプロパティが少なくとも1つあり、それらをマージする必要があります。それは役に立ちますか? – Sahas

+0

実際には、いくつかの例を追加してください。合併の望んだ結果 –

答えて

0

機能を使用して、マージがグループ化する共通キーを定義することができます。ソートされていないデータでも動作します。

function merge(array, key) { 
 
    var r = [], 
 
     hash = Object.create(null); 
 

 
    array.forEach(function (a) { 
 
     a.forEach(function (o) { 
 
      if (!hash[o[key]]) { 
 
       hash[o[key]] = {}; 
 
       r.push(hash[o[key]]); 
 
      } 
 
      Object.keys(o).forEach(function (k) { 
 
       hash[o[key]][k] = o[k]; 
 
      }); 
 
     }); 
 
    }); 
 
    return r; 
 
} 
 

 
var one = [{ id: 1, score: 100 }, { id: 2, score: 200 }, { id: 4, score: 400 }], 
 
    two = [{ id: 2, name: "test1" }, { id: 1, name: "test2" }, { id: 3, name: "test3" }], 
 
    merged = merge([one, two], 'id'); 
 

 
console.log(merged);

+1

ありがとう、..... – Sahas

0

は手の前に両方の配列をソート?

one.sort((a, b) => a.id - b.id); 
two.sort((a, b) => a.id - b.id); 

今の配列がソートされていることを、あなたはそれらを適切にマージすることができるはずです。

console.log(merge(one, two)); 
+0

ありがとう..私はこれを試してみました..第二の配列に一致するものがない第一の配列の配列要素を持っていれば動作しませんでした。以下は例です ソート済み配列 - [{id:1}、{id:2}、{id:4}] [{id:1、name: 'test2'}、{ [{id:1、name: 'test2'}、 {id:2、name:2、名前: 'test1'}、 {ID:3、名前: 'test3'}] [ 'test1'}、 {id:3、名前: 'test3'}] – Sahas

+0

@Sahas良い点! – andlrc

-1

私はあなたがlodashでmergeを探していると思います。後続のソースは、以前のソースのプロパティ割り当てを上書きします。したがって、後続のIDを上書きします

var users = { 
    'data': [{ 'user': 'barney' }, { 'user': 'fred' }] 
}; 

var ages = { 
    'data': [{ 'age': 36 }, { 'age': 40 }] 
}; 

_.merge(users, ages); 
// → { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } 
関連する問題