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

Check if variable contains any value of array

本文关键字:任何值 数组 包含 变量 是否 检查      更新时间:2023-09-26

我有两个这样的数组;

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

因为它是CCD_ 4的唯一不包含CCD_。我做错了什么?

我会为此写两个循环:

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>

您可以使用filter+一些ES5 Array方法:

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(请参阅我提供的链接),或者用简单的for循环重写some部分并使用$.grep而不是Array.prototyp.filter是非常简单的。

似乎您使用的是indexOf的Array版本,如果匹配不准确,则该版本不起作用。有了更多的设置,你可以使用字符串版本的indexOf

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=compareValue(arr1,arr2);

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

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

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