检查变量是否包含任何数组值

时间:2014-10-23 13:03:29

标签: javascript jquery

我有两个这样的数组;

arr1 = ["foo.com", "bar.com"],
arr2 = ["//test.net/index.html", "http://www.bar.com", "https://foo.com/example.js"]

我在迭代arr2,我想省略包含arr1任何值的那些。

目前我正在使用indexOf但如果值不完全匹配则不起作用。

$.each(arr2, function(k,v){
  if(arr1.indexOf(v) == -1)
    console.log(v);
});

我希望输出上面的代码

//test.net/index.html

因为arr2的唯一值不是包含 arr1的任何值。我做错了什么?

4 个答案:

答案 0 :(得分:3)

您可以使用filter + some ES5数组方法:

var arr1 = ["foo.com", "bar.com"],
    arr2 = ["//test.net/index.html", "http://www.bar.com", "https://foo.com/example.js"];

var result = arr2.filter(function(val) {
    return !arr1.some(function(el) {
        return val.indexOf(el) !== -1;
    });
});

alert(result);

支持ES5从IE9 +开始,但是如果你需要它在旧的IE中工作,你可以使用polyfills(参见我提供的链接),或者用简单{{1}重写some部分是非常简单的}循环并使用for代替$.grep

答案 1 :(得分:3)

我会为此编写两个循环:

arr1 = ["foo.com", "bar.com"],
arr2 = ["//test.net/index.html", "http://www.bar.com", "https://foo.com/example.js"]

$.each(arr2, function(x,y){
    var found = false;
    $.each(arr1, function(k,v){
        if(!(y.indexOf(v) == -1)){
        found = true;
        return false;
        }
    });
    
    if(!found){
        console.log(y);
    }
    
    found= false;
});  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>

答案 2 :(得分:0)

看起来你正在使用indexOf的数组版本,这不起作用,但匹配不准确。 通过更多设置,您可以使用indexOf的String版本

function compareValues (arr1, arr2){

var res = false;
$.each(arr2, function(k,v) {
    checkAgainstArray(arr1, v);
});

function checkAgainstArray(arr1, value) {
    $.each(arr1, function(k, v) {
       if(value.indexOf(v) !== -1){
         res  = true;
       }
    });
}
  return res;
}

//稍后

var isValueInArray = compareValues(arr1,arr2);

(代码未经过测试),但我希望这有帮助

答案 3 :(得分:-2)

尝试使用javascript RegExp为每个数组元素进行匹配

http://www.w3schools.com/js/js_regexp.asp