2017-10-11 120 views
-1

我有一個api調用,它使用更新的jSON對象進行回覆,我也有1個靜態json對象文件。我正試圖比較每個團隊中具有相同名稱的對象中的值。JavaScript/jQuery:比較2個jSON對象並將結果輸出到新對象

因此,如果團隊約翰在舊文件中有22個,並且現在有28個,那麼新對象應該將Team John輸出爲6.減去2並顯示差異。

我做了一個jsFiddle來幫助理解和更新。

最新更新:答案已被mscdeveloper解決!檢查他的帖子並在下面回答。

UPDATE(未回答):我已經找到了解決方案,同時在計算器搜索,這不正是我想要的,但我在這個過程中失去了球隊的名字,我怎麼能修復代碼到它doesn不會刪除它,我知道它與我有的groupByTypeID函數有關係嗎?

更新的jsfiddle: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); 

所有幫助表示讚賞! 謝謝。

+0

那其他類型的? (字符串,日期,數組,......) –

+0

因爲** JSON是一種字符串格式**所有你需要做的就是用'==='.of你的兩個JSON字符串進行字符串比較。除非你不是在談論JSON,但那就是你所說的...... –

+0

哇這麼多投票權爲了什麼?我試圖讓這個問題得到解決,但是現在人們沒有理由不理解爲什麼沒有任何理由就投下任何東西。 我所有的只是一個簡單的問題,如果我想從obj1減去numMembers與obj2 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

謝謝,這工作!你是個學者和紳士! –