我有两个数组
var arr1 = [
{'id':'1','name':'test1','value':'star','role':['monitor']},
{'id':'2','name':'test2','value':'player','role':['monitor','Supervisor']},
{'id':'3','name':'test3','value':'saviour','role':['Supervisor']},
{'id':'4','name':'test4','value':'rock','role':['monitor']},
{'id':'5','name':'test5','value':'rocky','role':['boxer','monitor']}
]
var arr2 = ['Supervisor','monitor'];
我想获得arr2值与arr1角色值
正确匹配的结果具有该类别的人应该被推送到arr3。
所以结果应该是{'id':'2','name':'test2','value':'player','role':['monitor','Supervisor']}
。
如果arr2有一个值,那么我们可以使用arr1.indexOf(arr2[0])!='-1'
但是如何满足"和" for
循环中的条件..
如果可能,我不想使用它,但我能想到的只有:
if( arr1.indexOf(arr2[0])!='-1' && arr1.indexOf(arr2[1])!='-1'){
return arr1[i];
}
答案 0 :(得分:1)
这里的主要技巧是数组的相等性。
// Assuming we have array 'equals' method which compares the array equality
// el['role'] == arr2 won't work
var result = arr1.filter(function(el){
return el['role'].equals(arr2);
});
因此,我们可以看到我们只需要处理数组相等。 这篇文章How to compare arrays in JavaScript?有很多关于它的讨论。有人甚至已经实现了“等于”#39;方法。
答案 1 :(得分:1)
就像@Marc B和@Terry所说,你只需做一个交集。
这是没有Jquery的版本:
function intersection(a, b)
{
var result = [], ai = 0, bi = 0;
a.sort();
b.sort();
while( a.length > ai && b.length > bi )
{
if(a[ai] < b[bi] ){
ai++;
}
else if(a[ai] > b[bi] ){
bi++;
}
else
{
result.push(a[ai]);
ai++;
bi++;
}
}
return result;
}
var arr1 = [
{'id':'1','name':'test1','value':'star','role':['monitor']},
{'id':'2','name':'test2','value':'player','role':['monitor','Supervisor']},
{'id':'3','name':'test3','value':'saviour','role':['Supervisor']},
{'id':'4','name':'test4','value':'rock','role':['monitor']},
{'id':'5','name':'test5','value':'rocky','role':['boxer','monitor']}
]
var arr2 = ['Supervisor','monitor'];
var arr3 = [];
arr1.forEach(function(value){
if(intersection(value.role, arr2).length === arr2.length){
arr3.push(value);
}
});
console.log(arr3);
答案 2 :(得分:0)
你可以使用jQuery one-liner来比较数组 - 最好的是它们不必完全相同的顺序。 Simply use the .not()
method, previously mentioned before
唯一的技巧是使用$.each()
循环遍历第一个数组,并使用.not()
将role
对象的数组与arr2
进行比较:
var arr1 = [
{'id':'1','name':'test1','value':'star','role':['monitor']},
{'id':'2','name':'test2','value':'player','role':['monitor','Supervisor']},
{'id':'3','name':'test3','value':'saviour','role':['Supervisor']},
{'id':'4','name':'test4','value':'rock','role':['monitor']},
{'id':'5','name':'test5','value':'rocky','role':['boxer','monitor']}
]
var arr2 = ['Supervisor','monitor'];
var arr3 = [];
$.each(arr1, function(idx,person){
if($(person.role).not(arr2).length === 0 && $(arr2).not(person.role).length === 0) {
arr3.push(person);
}
});
console.log(arr3);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;