Javascript 如何比较或关联2 getJson?
我需要比较这两个Json并获取get1以返回所有数据,除了idConcepto和impuesto与get2相同的数据 例如: get1= get2= 结果我需要:Javascript 如何比较或关联2 getJson?,javascript,jquery,json,Javascript,Jquery,Json,我需要比较这两个Json并获取get1以返回所有数据,除了idConcepto和impuesto与get2相同的数据 例如: get1= get2= 结果我需要: //get1 $.getJSON(“https://maxtechglobal.com/vencimientos/agip/ib.php?cuit=“+”cuit“,函数(结果){ 对于(var i=0;i
//get1
$.getJSON(“https://maxtechglobal.com/vencimientos/agip/ib.php?cuit=“+”cuit“,函数(结果){
对于(var i=0;i });代码>您可以使用ES6或jQuery中的承诺存储来自getJson async的数据。
一旦在这样的变量中有了两个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
}
}
您可以使用array#filter
和array#some
来获取不共享相同idConcepto
和imputesto
的数据
var get1={“data”:[{“impusto”:“IVA”,“idConcepto”:“30”,“id”:“266”,“datos”:“antipo”:“PRESENTACION”,“venciiento”:“2017-09-18”,“agencia”:“AFIP”,“id_perfil”:“146”},{“impusto”:“ganiancias SOCIEDADES”,“idConcepto”:“10”,“id”:“268”,“datos”:“antipo”:“PAGO”,“venciiento”:“2017-09-13”,“agencia”:“AFIP”,“id_perfil”:“146”},
get2={“数据”:[{“impuesto”:“IVA”,“idConcepto”:“30”,“id”:“607”,“datos”:{“anticipo”:“PRESENTACION”,“vencimiento”:“2017-09-18”,“agencia”:“AFIP”,“id_perfil”:“187”}};
var result=get1.data.filter(函数(o1){
return!get2.data.some(函数(o2){
返回o1.impuesto==o2.impuesto&&o1.idConcepto==o2.idConcepto;
});
});
控制台日志(结果)
您需要在另一个回调函数中执行$.getJSON
中的一个,或者使用承诺等待这两个函数完成。我如何设置条件,使其仅显示不重复的函数?使用数组.prototype.filter()
删除重复的元素。您也可以使用lodash或underline.js之类的库。我喜欢答案,但返回我:未捕获错误:尚未为上下文加载模块名“lodash”:。使用require([])
我使用这个cdn:')如果您像您一样通过cdn导入,您可以删除该行:var=require('lodash');您在JSFIDLE中的脚本不起作用,因为您没有使用ES6,也没有处理异步数据,所以我更新了上面的解决方案以适应您的用例:)我说它不起作用的意思是控制台返回完整的data1数组,而不删除重复的数组,就像您编写的新代码一样,我得到了相同的结果…但是如何替换get 1和get 2中的getJson?更新了解决方案,请检查。您面临的问题是什么?按照您的代码将其用于不同的函数,尽管它看起来非常重复,但有没有办法优化它?您应该创建一个公共函数,并将promise1、Promise2和表的id传递给它。
"impuesto": "GANANCIAS SOCIEDADES",
"idConcepto": "10",
"id": "268",
"datos": {
"anticipo": "PAGO",
"vencimiento": "2017-09-13",
"agencia": "AFIP",
"id_perfil": "146"
var _ = require('lodash');
var data1 = [...JSON1];
var data2 = [...JSON2];
_.remove(data1, obj1 => data2.some(obj2 =>
((obj1.impuesto === obj2.impuesto) &&
(obj1.idConcepto === obj2.idConcepto))));
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
}
}