2017-10-11 4 views
-1

更新されたjSONオブジェクトで応答するAPIコールがあります。また、1つの静的なjSONオブジェクトファイルもあります。私は同じ名前のチームごとにオブジェクトの値を比較しようとしています。JavaScript/jQuery:2つのjSONオブジェクトを比較し、結果を新しいオブジェクトに出力します。

チームジョンが古いファイルに22を持ち、現在28がある場合、新しいオブジェクトはチームジョンを6として出力する必要があります.2を差し引いて差分を表示します。

私はjsFiddleを理解して更新するのに役立てました。

最新の更新:答えはmscdeveloperによって解決されました!下の彼の投稿と答えを確認してください。

UPDATE(ない答え): stackoverflowの中で検索しているときに私は解決策を発見した、これは私が欲しいまさにんが、私はそれはdoesnのどこにコードを修正することができますどのように、プロセスにチームの名前を失いましたそれを削除しないで、私はそれが私が持っているgroupByTypeID関数と関係があることを知っていますか?すべてのヘルプは高く評価されhttps://jsfiddle.net/kqmfsz9n/5/

var obj1 = { 
    "teams": [ 
    { 
     name: 'Test 1', 
     numMembers: '50' 
    }, 
    { 
     name: 'Test 2', 
     numMembers: '12' 
    } 
    ] 
}; 

var obj2 = { 
    "teams": [ 
    { 
     name: 'Test 1', 
     numMembers: '75' 
    }, 
    { 
     name: 'Test 2', 
     numMembers: '18' 
    } 
    ] 
}; 

var newObj = {}; 
function groupByTypeID(arr) { 
    var groupBy = {}; 
    jQuery.each(arr, function() { 
    groupBy[this.name] = parseInt(this.numMembers); 
    }); 
    return groupBy; 
} 

var userArrayGroups = groupByTypeID(obj2.teams); 
var origArrayGroups = groupByTypeID(obj1.teams); 

var newObj = []; 
for (var prop in userArrayGroups) { 
    newObj[prop] = userArrayGroups[prop] - origArrayGroups[prop]; 
    newObj.push(userArrayGroups[prop] - origArrayGroups[prop]); 
    if (newObj[prop] == 0) { 
    delete newObj[prop]; 
    } 
} 

console.log(newObj); 

はjsFiddleを更新しました! ありがとうございます。

+0

他にはどんなでしょうか? (文字列、日付、配列など) –

+0

** JSONは文字列形式なので、2つのJSON文字列の '==='。との文字列比較が必要です。あなたがJSONについて話していない限り、それはあなたが言うことです... –

+0

何のためにすごく多くの投票ダウン?私はこれを解決しようとしていますが、最近人々は理由を理解するのを助けることなく、何の理由もないのに投票します。 私はobj2 numMembersでobj1からnumMembersを減算したい場合、簡単な質問をしましたが、これについてはどうすればよいですか? –

答えて

1
var obj1 = { 
     "teams": [ 
     { 
      name: 'Test 1', 
      numMembers: '50' 
     }, 
     { 
      name: 'Test 2', 
      numMembers: '12' 
     } 
     ] 
    }; 

    var obj2 = { 
     "teams": [ 
     { 
      name: 'Test 1', 
      numMembers: '75' 
     }, 
     { 
      name: 'Test 2', 
      numMembers: '18' 
     } 
     ] 
    }; 

    var newObj = {}; 
var items_arr=[]; //array of obj2 not exist in obj1 

    if(obj1.teams){    //if exist array of teams obj1 
    var o1teams = obj1.teams; 
    if(obj2.teams){  //if exist array of teams obj2 
     var o2teams = obj2.teams; 
     for(var key2 in o2teams){ 
      var o2teams = obj2.teams; 
      for(var key1 in o1teams){ 
        if(o2teams[key2].name==o1teams[key1].name){ 
         var numMembers_o1_int=parseInt(o1teams[key1].numMembers)||0; 
         var numMembers_o2_int=parseInt(o2teams[key2].numMembers)||0; 
         var result_numMembers_int=numMembers_o2_int-numMembers_o1_int; 
         var result_numMembers=result_numMembers_int+''; //convert to string 
         var items_for_add=o1teams[key1]; 
         items_for_add.numMembers=result_numMembers; 
         items_arr.push(items_for_add); 
        } 
      } 
     } 
     } 
    } 
    newObj.items=items_arr; 

    console.log(newObj); 

https://jsfiddle.net/mscdeveloper/uxv1t2a7/3/

+0

これは2つのオブジェクトを比較するのに最適ですが、numMembersを互いに差し引いて結果を新しいオブジェクトまたは配列にプッシュしません。 –

+0

私は正しい答えを出すために私のjsFiddleを更新しました。それでも少しずつ微調整が必​​要です。それを確認してください –

+0

ありがとう、これはうまくいきました!あなたは学者と紳士です! –

関連する問題