【问题标题】:Compare 2 jSON files with same objects比较 2 个具有相同对象的 JSON 文件
【发布时间】:2017-10-06 17:25:35
【问题描述】:

所以我有 2 个 JSON 文件,都具有相同的设置和相同的对象,不同之处在于一个具有未更新的旧数据,另一个具有实时更新的实时数据,我想用新数据减去旧数据,输出结果。

我使用的代码不成功:

jQuery.getJSON(liveDataURL, function(liveData){

    jQuery.getJSON(oldDataURL, function(oldData){

        liveData.sort(function(a, b){
             return a.number - b.number;
        }).reverse();
        oldData.sort(function(a, b){
             return a.number - b.number; 
        }).reverse();

        var newList = liveData.number - oldData.number;
        console.log(newList);
    });

感谢任何帮助!

【问题讨论】:

    标签: javascript jquery json get getjson


    【解决方案1】:

    你说的减法是什么意思?

    a = {foo: 17, bar: 12, baz: false} b = {foo: 17, bar: 10}

    “a - b”是什么意思?

    假设:

    "a - b" := {bar: 12, baz: false}

    这样的事情会起作用:

    const delta = (a, b) => {
      const d = {};
      Object.keys(a).forEach(key => {
        if (typeof a[key] === 'object') {
          d[key] = delta(a[key], b[key] || {});
          if (d[key] === undefined) {
            delete d[key];
          }
        } else {
          if (a[key] !== b[key]) {
            d[key] = a[key];
          }
        }
      });
      return Object.keys(d).length ? d : undefined;
    };
    

    【讨论】:

    • 我的解决方案不处理数组 :-) — 读者练习。
    • "return a.number - b.number" 这将返回一个过滤结果,首先显示具有最高数字的结果。我首先使用它为我的列表排序,数量最多,然后我想将这两个列表的结果相互减去。
    【解决方案2】:
    var newList = liveData.number - oldData.number;
    

    这是查找列表之间差异的错误方法。 这样做,如果你想找到数字的差异

    假设两个列表的长度相同。

    var newList = [];
    for (var i = 0; i < liveData.length; i++){
        newList.append(liveData[i].number - oldData[i].number);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      相关资源
      最近更新 更多