【问题标题】:Get the existing intersections between multiple object arrays获取多个对象数组之间的现有交集
【发布时间】:2018-03-23 06:42:40
【问题描述】:

我有几个具有相同 ID 的数组。我想要实现的是在纯 javascript 中获取数组之间的交集,没有库。如果 Id 匹配并且 arraypicklist 值在 2 个或多个数组之间不相等,我应该得到一个具有匹配 Id 的数组。

下面是我尝试过的示例,但最终没有 id,我希望至少有 1 个匹配项。在这种情况下,Id:123 在第一个和第二个数组中存在匹配项。所以我会期待

intersection = [{"Id":"123","arrayPicklist":"Categorie__c"},{"Id":"123","arrayPicklist":"Regio__c"}];

小提琴:https://jsfiddle.net/ozckc0tw/4/

var buckets = [[{"Id":"123","arrayPicklist":"Categorie__c"}],
[{"Id":"123","arrayPicklist":"Regio__c"}],
[{"Id":"124","arrayPicklist":"Categorie__c"}],              
[{"Id":"123","arrayPicklist":"Regio__c"},{"Id":"125","arrayPicklist":"Regio__c"},{"Id":"123","arrayPicklist":
"Regio__c"},{"Id":"126","arrayPicklist":"Regio__c"}]]     

                            function IntersectionByKey(key) {
                    var i,
                        j,
                        k,
                        ret = [],
                        item,
                        args = [].slice.call(arguments, 1);

                    args.sort(function(a, b) {return a.length - b.length});                                      
                    i:for(i=0; i<args[0].length; i++) {
                        item = [Object.assign(args[0][i], {})];
                        j:for(j=1; j<args.length; j++) {
                            for(k=0; k<args[j].length; k++) {
                                if(key in args[0][i] && args[0][i][key] == args[j][k][key]){
                                    item.push(Object.assign(args[j][k], {}));
                                    continue j;
                                }
                            }
                            continue i; 
                        }
                        ret.push(item);
                    }
                    return ret;
                }
                var key = 'Id';
                var intersection = IntersectionByKey.apply(null, [key].concat(buckets));


                 console.log('intersection '+JSON.stringify(intersection))

【问题讨论】:

    标签: arrays loops object filter reduce


    【解决方案1】:

    完成,对不起,我没有看你的代码,我根据你的要求尝试了我的逻辑,你可以使用它。 my logic

    var buckets = [
        [{
          "Id": "123",
          "arrayPicklist": "Categorie__c"
        }],
        [{
          "Id": "123",
          "arrayPicklist": "Regio__c"
        }],
        [{
          "Id": "124",
          "arrayPicklist": "Categorie__c"
        }],
        [{
          "Id": "123",
          "arrayPicklist": "Regio__c"
        }, {
          "Id": "125",
          "arrayPicklist": "Regio__c"
        }, {
          "Id": "123",
          "arrayPicklist": "Regio__c"
        }, {
          "Id": "126",
          "arrayPicklist": "Regio__c"
        }]
      ],
      intersection = [{
        "Id": "123",
        "arrayPicklist": "Categorie__c"
      }, {
        "Id": "123",
        "arrayPicklist": "Regio__c"
      }];
    var resArray = [];
    
    for (var j = 0; j < intersection.length; j++) {
      for (var i = 0; i < buckets.length; i++) {
        for (var k = 0; k < buckets[i].length; k++) {
          if (buckets[i][k].Id == intersection[j].Id && buckets[i][k].arrayPicklist == intersection[j].arrayPicklist) {
            resArray.push(buckets[i][k]);
    
          }
        }
      }
    
    }
    console.log(resArray);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 2022-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      相关资源
      最近更新 更多