如何在数组中使用for循环查找匹配大小写

时间:2015-04-06 18:44:19

标签: javascript jquery angularjs

我有两个数组

 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];
}

3 个答案:

答案 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进行比较:

&#13;
&#13;
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;
&#13;
&#13;