2017-10-11 71 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

谢谢,这工作!你是个学者和绅士! –