Javascript 两个对象数组需要根据others键过滤其中一个

Javascript 两个对象数组需要根据others键过滤其中一个,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我有两个对象数组,如下所示: var array1 = [{"id": "-1","OwnerID": 777,"Admin": "true"},{"id": "-1","OwnerID": 555,"Admin": "true"},{"id": "-1","OwnerID": 444,"Admin": "true"},{"id": "-1","OwnerID": 222,"Admin": "true"},{"id": "-1","OwnerID": 111,"Admin": "true"}];

我有两个对象数组,如下所示:

var array1 = [{"id": "-1","OwnerID": 777,"Admin": "true"},{"id": "-1","OwnerID": 555,"Admin": "true"},{"id": "-1","OwnerID": 444,"Admin": "true"},{"id": "-1","OwnerID": 222,"Admin": "true"},{"id": "-1","OwnerID": 111,"Admin": "true"}];

var array2 = [{"id": 777, "OwnerName": "Blah", "OwnerType": "Test"},{"id": 555, "OwnerName": "Blah", "OwnerType": "Test"},{"id": 444, "OwnerName": "Blah", "OwnerType": "BusinessMan"},{"id": 222, "OwnerName": "Blah", "OwnerType": "BusinessMan"},{"id": 111, "OwnerName": "Blah", "OwnerType": "BusinessMan"},{"id": 234, "OwnerName": "Blah", "OwnerType": "BusinessMan"},{"id": 432, "OwnerName": "Blah", "OwnerType": "Test"},{"id": 112, "OwnerName": "Blah", "OwnerType": "BusinessMan"},{"id": 114, "OwnerName": "Blah", "OwnerType": "Test"}]
我需要得到array1的过滤数组,其中array2中的OwnerType是Test。数组1中的所有者id链接到数组2中的id。我希望在尽可能少的行这样做。理想情况下,我主要想看看数组长度是否大于1,因为第一个数组应该只有这种类型的数组。感谢您的帮助

编辑:

所需的输出应为阵列1,看起来类似于:

[{"id": "-1","OwnerID": 777,"Admin": "true"},{"id": "-1","OwnerID": 555,"Admin": "true"}]

两个嵌套的for循环应能轻松解决此问题:

var array_result = [];

for(var i = 0; i < array1.length; i++){
    for(var j = 0; j < array2.length; j++){
        if(array2[j].id == array1[i].OwnerID && array2[j].OwnerType == "Test")
            array_result.push(array1[i]);
    }
}
var数组_结果=[];
对于(变量i=0;i

如果array2是一个关联数组,以id作为键,那么过滤的复杂性可能会小得多。

因此,首先要返回
array2
中具有匹配的
id
array1
)和
OwnerID
array2
)值的所有对象

然后,仅从
array2
中获取具有匹配的
id
(具有
array1
OwnerID
且具有
OwnerType
Test
的对象

// filter array2 by matches
var matches = array2.map(function(obj) { 
  return idArr.indexOf(obj.id) > -1 && obj.OwnerType === 'Test'; 
});

结果,
matches
,将是一个对象数组,具有正确的
id
Test
OwnerType

// filter array2 by matches
var matches = array2.map(function(obj) { 
  return idArr.indexOf(obj.id) > -1 && obj.OwnerType === 'Test'; 
});
array1.filter(ar1 => array2.filter(ar2 => ar2.OwnerType == 'Test' && ar2.id == ar1.OwnerID).length > 0).length > 1

谢谢大家在这方面的帮助

你能提供一个例子,说明你的函数(array1,array2)
的期望输出吗?@epascarello我试过,我只是有点难以理解如何使用两个数组:|我被你的问题弄糊涂了,你说“…array2中的所有者类型在哪里测试”。在您的示例中,我看不到“Test”,也看不到您期望的输出数组…@Himmel是的,在数组1中保留对象的决定因素是array2是否具有关键字OwnerType:Test,而加入这两个数组的是array1的OwnerID和array2的id