如何比较或关联2 getJson?

时间:2017-09-28 17:09:18

标签: javascript jquery json

我需要比较这两个Json并获取get1以返回除idConcepto和impuesto与get2相同的所有数据

示例:

  

get1 =   https://maxtechglobal.com/vencimientos/agip/ib.php?cuit=30712413871

"data": [
{
"impuesto": "IVA",
"idConcepto": "30",
"id": "266",
"datos": {
"anticipo": "PRESENTACION",
"vencimiento": "2017-09-18",
"agencia": "AFIP",
"id_perfil": "146"
}
},
{
"impuesto": "GANANCIAS SOCIEDADES",
"idConcepto": "10",
"id": "268",
"datos": {
"anticipo": "PAGO",
"vencimiento": "2017-09-13",
"agencia": "AFIP",
"id_perfil": "146"
}
}
]
  

get2 =   http://estudiomiramonte.com/app/api/impuestos_modal.php?id_perfil=146

 "data": [
{
"impuesto": "IVA",
"idConcepto": "30",
"id": "607",
"datos": {
"anticipo": "PRESENTACION",
"vencimiento": "2017-09-18",
"agencia": "AFIP",
"id_perfil": "187"
}
}
]
  

我需要的结果:

"impuesto": "GANANCIAS SOCIEDADES",
"idConcepto": "10",
"id": "268",
"datos": {
"anticipo": "PAGO",
"vencimiento": "2017-09-13",
"agencia": "AFIP",
"id_perfil": "146"



//get1

$.getJSON("https://maxtechglobal.com/vencimientos/agip/ib.php?cuit=" + "cuit", function(result) {
  for (var i = 0; i < result.data.length; i++) {
    if (result.data[i].id != otheresult.data[i].id) {
      var table_abril = document.getElementById("AGIP_edit_todos");
      var row = table_abril.insertRow(-1);

      var cell1 = row.insertCell(0);
      var cell2 = row.insertCell(1);
      var cell3 = row.insertCell(2);

      cell1.innerHTML = result.data[i].id;
      cell2.innerHTML = result.data[i].impuesto;
      cell3.innerHTML = '<input type="checkbox" name="optionsCheckboxes">';
    }
  }
});
&#13;
&#13;
&#13;

&#13;
&#13;
//get2

$.getJSON("api/impuestos_modal.php?id_perfil=" + id + "", function(result) {});
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

您可以使用ES6或jQuery中的promises存储来自getJson异步的数据。 一旦你在这些变量中都有getJSON,你可以通过lodash.remove()和Array.some()这样做:

var _ = require('lodash');

var data1 = [...JSON1];

var data2 = [...JSON2];

_.remove(data1,  obj1 => data2.some(obj2 =>
    ((obj1.impuesto === obj2.impuesto) &&
        (obj1.idConcepto === obj2.idConcepto))));

如果你既不使用ES6也不承诺你可以这样:

var data = {};

$.getJSON("https://maxtechglobal.com/vencimientos/agip/ib.php?cuit=" + "30712413871", function(obj) {
    this.data.data1 = obj;
    clearData(this.data);
}.bind({data:data}));

$.getJSON("api/impuestos_modal.php?id_perfil=" + "146", function(obj) {
    this.data.data2 = obj;
    clearData(this.data);
}.bind({data:data}));

function clearData(data) {

    var data1 = data.data1;
    var data2 = data.data2;

    if (data1 && data2) {
        _.remove(data1,  function(obj1) { data2.some(function (obj2) {
            return ((obj1.impuesto === obj2.impuesto) &&
                (obj1.idConcepto === obj2.idConcepto))})});
        console.log(data1); // Your solution
    }

}

答案 1 :(得分:1)

您可以使用array#filterarray#some来获取不共享idConceptoimpuesto的数据。

var get1 = {"data": [{"impuesto": "IVA","idConcepto": "30","id": "266","datos": {"anticipo": "PRESENTACION","vencimiento": "2017-09-18","agencia": "AFIP","id_perfil": "146"}},{"impuesto": "GANANCIAS SOCIEDADES","idConcepto": "10","id": "268","datos": {"anticipo": "PAGO","vencimiento": "2017-09-13","agencia": "AFIP","id_perfil": "146"}}]},
    get2 = { "data": [{"impuesto": "IVA","idConcepto": "30","id": "607","datos": {"anticipo": "PRESENTACION","vencimiento": "2017-09-18","agencia": "AFIP","id_perfil": "187"}}] };

var result = get1.data.filter(function(o1){
  return !get2.data.some(function(o2){
    return o1.impuesto === o2.impuesto && o1.idConcepto === o2.idConcepto;
  });
});

console.log(result);

由于您的两个数据都是从外部来源获取的,因此您可以使用Promise.all()。一旦得到两个结果,就可以使用上述功能。

直播示例

var get1 = $.getJSON("https://maxtechglobal.com/vencimientos/agip/ib.php?cuit=" + "30712413871").done();
var get2 = $.getJSON("https://estudiomiramonte.com/app/api/impuestos_modal.php?id_perfil=" + "146").done();

Promise.all([get1, get2]).then(function([obj1, obj2]){
var result = obj1.data.filter(function(o1) {
  return !obj2.data.some(function(o2) {
    return o1.impuesto === o2.impuesto && o1.id === o2.idConcepto;
  });
});

console.log(result);
})
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script>