我如何从JavaScript中的2对象中获得公共项目

How do I get common items from 2 object in JavaScript?

本文关键字:项目 对象 JavaScript 中的      更新时间:2023-09-26

我有两个这样的对象数组:

数组1

[{"id":1,"relationship_type_id":"3"},
{"id":2,"relationship_type_id":"2"},
{"id":3,"relationship_type_id":"1"},]

数组2

[{"relationship_type_id":1,"contributing":"yes"},
{"relationship_type_id":2,"contributing":"no"},
{"relationship_type_id":3,"contributing":"yes"}]

我如何找出数组1中的哪个ids具有基于数组2的贡献关系类型,即贡献=="yes"?

结果应该是这样的:

结果1

[{"id":1}, {"id":3}]

或者更进一步,只返回贡献关系的数量

结果2

contributingRelationship = 2

您可以像这样将.filter().some().map()组合使用。

如果arr2特别大,您可以首先计算贡献类型,并将它们保存在映射中,以便在过滤arr1时更快地检索。

var arr1 = [{"id":1,"relationship_type_id":"3"},
{"id":2,"relationship_type_id":"2"},
{"id":3,"relationship_type_id":"1"}];
var arr2 = [{"relationship_type_id":1,"contributing":"yes"},
{"relationship_type_id":2,"contributing":"no"},
{"relationship_type_id":3,"contributing":"yes"}];
var contributing = arr1.filter(function(item) {
  // filter based on whether arr2 has corresponding item
  return arr2.some(function(other_item) {
    return other_item.relationship_type_id == item.relationship_type_id && other_item.contributing == "yes";
  });
}).map(function(item) {
  // map into final representation
  return {
    id: item.id
  };
});
console.log(contributing);

这样如何:

(function(){
    var contributingIds = [];
    var result = [];
    var arr = [
        {"id":1,"relationship_type_id":"3"},
        {"id":2,"relationship_type_id":"2"},
        {"id":3,"relationship_type_id":"1"}
    ];
    var arr2 = [
        {"relationship_type_id":1,"contributing":"yes"},
        {"relationship_type_id":2,"contributing":"no"},
        {"relationship_type_id":3,"contributing":"yes"}
    ];
    arr2.forEach(function(item){
        if(item.contributing === 'yes'){
            contributingIds.push(item.relationship_type_id);
        }
    });
    arr.forEach(function(item){
        if(contributingIds.indexOf(parseInt(item.relationship_type_id, 10)) >= 0){
            result.push(item.id);
        }
    });
    console.log(result);
})();

你可以这样做:

var idarray = [{"id":1,"relationship_type_id":"3"},
{"id":2,"relationship_type_id":"2"},
{"id":3,"relationship_type_id":"1"},]; 

var relarray = [{"relationship_type_id":1,"contributing":"yes"},
{"relationship_type_id":2,"contributing":"no"},
{"relationship_type_id":3,"contributing":"yes"}];
var resultArray = [];
for (var counter=0; counter < idarray.length; counter++) {
        for (var relarrayCounter =0; relarrayCounter < relarray.length; relarrayCounter++) {
            if(idarray[counter].relationship_type_id== relarray[relarrayCounter].relationship_type_id) {
               if (relarray[relarrayCounter].contributing == "yes") {
                   var resultObj = {};
                   resultObj.id = idarray[counter].relationship_type_id;
                   resultArray.push(resultObj);
               }
            }
        }
    }
console.log("Result =", resultArray);
console.log("Contributing relationship = ", resultArray.length);

这应该也可以。

var a = [{"id":1,"relationship_type_id":"3"},
         {"id":2,"relationship_type_id":"2"},
         {"id":3,"relationship_type_id":"1"},];
var b = [{"relationship_type_id":1,"contributing":"yes"},
         {"relationship_type_id":2,"contributing":"no"},
         {"relationship_type_id":3,"contributing":"yes"}];
var arr = [];
for(var i=0;i<b.length;i++)
    for(var j=0;j<a.length;j++){
        if(b[i].contributing == "yes" && a[j].relationship_type_id == b[i].relationship_type_id){
            arr.push({"id" : a[i].id});
        }
    }
console.log(JSON.stringify(arr));

小提琴

我使用了两个简单的foreach循环来遍历每组哈希值,查找指定的输入id。我希望它对你有用。

    // initialize the arrays
    var id_to_relation = [{"id":1,"relationship_type_id":"3"},
    {"id":2,"relationship_type_id":"2"},
    {"id":3,"relationship_type_id":"1"}]
    var relation_to_contribute = [{"relationship_type_id":1,"contributing":"yes"},
    {"relationship_type_id":2,"contributing":"no"},
    {"relationship_type_id":3,"contributing":"yes"}]
    
    window.getRelation = function(id)
    {
        var type = [];  // initialize relationship_type_id holder
        var contributing = 0;  // current count of contributing ids
        for (var hash in id_to_relation)
        {
            if (id_to_relation[hash]["id"] == id)
            {
                type.push(parseInt(id_to_relation[hash]["relationship_type_id"]));  // grab the related types
            }
        }
        for (var hash in relation_to_contribute)
        { 
            if (type.indexOf(relation_to_contribute[hash]["relationship_type_id"]) > -1)
            {
                contributing += relation_to_contribute[hash]["contributing"] == "yes" ? 1 : 0;
            }
        }
        document.getElementById("result").innerHTML = "contributingRelationship = " + contributing;
    }
Enter requested id: <input type="number" id="thisId" />
<br>
<button type="button" onclick="getRelation(document.getElementById('thisId').value)">
  Check id
</button>
<h1>Result</h1>
<p id="result"></p>