2016-05-18 2 views
0

2つのjson配列をオブジェクトとしてマージしようとしています。両方ともjsonの場合はplunkr fileを参照してください。私は予想される最終的な結果の配列idを正常に取得しましたが、以下のように予想されるjsonをどのように形成するのか分かりません。私はこの目的のためにアンダースコアを使用しています。結合と交差に基づいて2つのjson配列オブジェクトをマージする

注:オブジェクトがnewJsonに存在し、currentJsonに存在しない場合、マージ後、デフォルトではinactive状態になります。

正しいアプローチを使用しているかどうかはわかりません。

var newJsonID = _.pluck(newJson, 'id'); 
var currentJsonID = _.pluck(currentJson, 'id'); 
var union = _.union(newJsonID, currentJsonID); 
var intersection = _.intersection(currentJsonID, newJsonID); 
var final = _.difference(union, _.difference(currentJsonID, intersection); 

期待最終的な結果:

[ 
    { 
     "id": "12", 
     "property1Name": "1" 
     "status": "inactive" 
    }, 
    { 
     "id": "11", 
     "property1Name": "1" 
     "status": "inactive" 
    }, 
    { 
     "id": "10", 
     "property1Name": "1" 
     "status": "inactive" 
    }, 
    { 
     "id": "9", 
     "property1Name": "1" 
     "status": "active" 
    } 
] 
+0

どこからステータスを取得できますか?私は同じ「id」を意味しますか? –

+0

@NinaScholzあなたは最終的な予期した結果からステータスをどこで得るのですか? newJson内のidがcurrentJsonに存在する場合は、同じidのcurrentJsonステータスを取得し、それ以外の場合はデフォルトでinactiveにします。 – vincentsty

+0

あなたはアンダースコアソリューションに興味がありますか? –

答えて

1

つのループでプレーンJavascriptの溶液とルックアップのためのハッシュテーブルこれは、私がしようと持っているものです。

function update(newArray, currentArray) { 
 
    var hash = Object.create(null); 
 
    currentArray.forEach(function (a) { 
 
     hash[a.id] = a.status; 
 
    }); 
 
    newArray.forEach(function (a) { 
 
     a.status = hash[a.id] || 'inactive'; 
 
    }); 
 
} 
 

 
var newJson = [{ "id": "12", "property1Name": "1" }, { "id": "11", "property1Name": "1" }, { "id": "10", "property1Name": "1" }, { "id": "9", "property1Name": "1" }], 
 
    currentJson = [{ "id": "10", "property1Name": "1", "status": "inactive" }, { "id": "9", "property1Name": "1", "status": "active" }, { "id": "8", "property1Name": "1", "status": "active" }, { "id": "7", "property1Name": "1", "status": "inactive" }]; 
 
    
 
update(newJson, currentJson); 
 
document.write('<pre>' + JSON.stringify(newJson, 0, 4) + '</pre>');

+0

私は最終的な期待される解決策でproperty1Nameを忘れてしまった。基本的には、新しいJsonはproperty1Name、property2Nameなどのプロパティ名を多く持つことができますが、currentJsonはstatusという余分な1つのプロパティを持ちます。このソリューションに基づいて、あなたは 'return {id:a.id、property1Name:a.property1Name、status:hash [a.id]}'というハードコーディングをしなければなりません。追加のプロパティがjson(データベースから取得)に追加されている、私は再度javascriptでコードを変更するか、反映されません。これを避けるための解決策はありますか? – vincentsty

+0

ステータスプロパティのみを 'newJson'に追加しますか? –

+0

最終的な結果には、newJson plusのステータスで利用可能なすべての既存のプロパティが含まれている必要があります。 – vincentsty

関連する問題