Javascript 两个json文件的交集

Javascript 两个json文件的交集,javascript,json,intersection,Javascript,Json,Intersection,我有两个JSON数组,其字段相同,如下所示: var total_90 = [ { "date": "2011-11-14T17:22:59Z", "quantity": 2, "total": 90, "tip": 0, "type": "tab" }, { "date": "2011-11-14T17:07:21Z", "quantity": 2, "total": 90, "tip": 1, "type": "tab" }, { "date": "2012-11-1

我有两个JSON数组,其字段相同,如下所示:

var total_90 = [
    { "date": "2011-11-14T17:22:59Z", "quantity": 2, "total": 90, "tip": 0, "type": "tab" },
    { "date": "2011-11-14T17:07:21Z", "quantity": 2, "total": 90, "tip": 1, "type": "tab" },
    { "date": "2012-11-14T16:30:43Z", "quantity": 3, "total": 90, "tip": 0, "type": "tab" }
];

var tip_0 = [
    { "date": "2011-11-14T17:22:59Z", "quantity": 2, "total": 80, "tip": 0, "type": "tab" },
    { "date": "2011-11-14T17:07:21Z", "quantity": 2, "total": 70, "tip": 0, "type": "tab" },
    { "date": "2011-11-14T16:58:03Z", "quantity": 2, "total": 90, "tip": 0, "type": "tab" },
    { "date": "2011-11-14T16:30:43Z", "quantity": 2, "total": 90, "tip": 0, "type": "tab" }
];
我需要第三个JSON文件,它具有上述两个JSON文件的交叉点。(所谓交集,我指的是来自两个JSON文件的所有行,它们的TOTAL=90和TIP=0) 有没有办法做到这一点

我的预期输出将是第三个JSON文件,具有以下输出

{"date":"2012-11-14T16:30:43Z","quantity":3,"total":90,"tip":0,"type":"tab"},
{"date":"2011-11-14T16:58:03Z","quantity":2,"total":90,"tip":0,"type":"tab"},
{"date":"2011-11-14T16:30:43Z","quantity":2,"total":90,"tip":0,"type":"tab"}

使用
allData

您需要循环2个对象并将内容合并到1个对象中

例如,检查此线程,因为它是重复的


您可以执行以下操作来收集JSON文件中的所有行,这两个文件的TOTAL=90TIP=0-

var总计\u 90=[
{“日期”:“2011-11-14T17:22:59Z”,“数量”:2,“总计”:90,“提示”:0,“类型”:“选项卡”},
{“日期”:“2011-11-14T17:07:21Z”,“数量”:2,“总数”:90,“提示”:1,“类型”:“选项卡”},
{“日期”:“2012-11-14T16:30:43Z”,“数量”:3,“总数”:90,“提示”:0,“类型”:“选项卡”}
];
变量提示_0=[
{“日期”:“2011-11-14T17:22:59Z”,“数量”:2,“总数”:80,“提示”:0,“类型”:“选项卡”},
{“日期”:“2011-11-14T17:07:21Z”,“数量”:2,“总计”:70,“提示”:0,“类型”:“选项卡”},
{“日期”:“2011-11-14T16:58:03Z”,“数量”:2,“总计”:90,“提示”:0,“类型”:“选项卡”},
{“日期”:“2011-11-14T16:30:43Z”,“数量”:2,“总数”:90,“提示”:0,“类型”:“选项卡”}
];
//包含最终相交数组的空数组
var结果=[];
/*现在在两个数组上循环以遍历其中的所有元素*/
//在第一个数组上迭代
总计90.forEach(x=>{
//在第二个数组上迭代
提示0.forEach(y=>{
//仅当总数为90且tip为0时才推入输出阵列
如果((x.total==90&&y.total==90)&&(x.tip==0&&y.tip==0)){
结果:推({
日期:x.date,
数量:x.数量,
总计:x.total,
提示:x.tip,
类型:x.type
});
}
});
});

控制台日志(结果)输出的预期交叉点是什么在问题中添加了预期输出可能重复的-1这只给出了一个包含2个对象的allData对象,而不是合并到1中的对象。你能看一下吗?
var total_90 = [
{"date":"2011-11-14T17:22:59Z","quantity":2,"total":90,"tip":0,"type":"tab"},
{"date":"2011-11-14T17:07:21Z","quantity":2,"total":90,"tip":1,"type":"tab"},
{"date":"2012-11-14T16:30:43Z","quantity":3,"total":90,"tip":0,"type":"tab"}
              ]

var tip_0 = [
{"date":"2011-11-14T17:22:59Z","quantity":2,"total":80,"tip":0,"type":"tab"},
{"date":"2011-11-14T17:07:21Z","quantity":2,"total":70,"tip":0,"type":"tab"},
{"date":"2011-11-14T16:58:03Z","quantity":2,"total":90,"tip":0,"type":"tab"},
{"date":"2011-11-14T16:30:43Z","quantity":2,"total":90,"tip":0,"type":"tab"}
            ] 

allData['total_90'] = total_90;
allData['tip_0'] = tip_0;
function intersection(a, b)
{
  var result = [];

       for (var i = 0; i < a.length; i++){
            if (a[i].total == 90 && a[i].tip == 0)
            {

                result.push(a[i]);
            }
        }

       for (var i = 0; i < b.length; i++){
            if (b[i].total == 90 && b[i].tip == 0)
            {
                result.push(b[i]);
            }
        }
    return result;
}
function intersection(a, b)
{
  var result = [];

    var c = a.concat(b);


       for (var i = 0; i < c.length; i++){
            if (c[i].total == 90 && c[i].tip == 0)
            {

                result.push(c[i]);
            }
        }

    return result;
}