【问题标题】:JavaScript / jQuery: Compare 2 jSON objects and output result into new objectJavaScript / jQuery:比较 2 个 JSON 对象并将结果输出到新对象中
【发布时间】:2018-03-23 11:23:00
【问题描述】:

我有一个回复更新的 JSON 对象的 API 调用,我也有 1 个静态 JSON 对象文件。我正在尝试比较具有相同名称的每个团队的对象中的值。

因此,如果约翰队在旧文件中有 22 个,而现在有 28 个,则新对象应将约翰队输出为 6。减去 2 并显示差异。

我做了一个jsFiddle来帮助理解和更新。

最新更新:答案已由 mscdeveloper 解决!在下面查看他的帖子和答案。

更新(不是答案):我在 stackoverflow 中搜索时找到了一个解决方案,这正是我想要的,但我在此过程中丢失了团队的名称,我该如何修复代码到它不删除它的地方,我知道它与我拥有的 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);

感谢所有帮助! 谢谢。

【问题讨论】:

  • 其他类型呢? (字符串,日期,数组,...)
  • 由于 JSON 是一种字符串格式,您所要做的就是与您的两个 JSON 字符串中的 ===.of 进行字符串比较。除非你不是在谈论 JSON,但这就是你所说的......
  • 哇这么多投票反对什么?我正在努力解决这个问题,但是这些天人们在没有帮助理解原因的情况下无缘无故地对任何事情投反对票。我只有一个简单的问题,如果我想用 obj2 numMembers 从 obj1 中减去 numMembers,我该怎么做?

标签: javascript jquery json oop javascript-objects


【解决方案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/

【讨论】:

  • 虽然这对于比较两个对象非常有用,但它不会将 numMembers 彼此相减,并将结果推送到新对象或数组中。
  • 我已经更新了我的 jsFiddle 以给出正确的答案,但仍然需要更多的调整,请检查一下
猜你喜欢
  • 2016-01-15
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多