我有两个这样的数组;
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
的任何值。我做错了什么?
答案 0 :(得分:3)
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为每个数组元素进行匹配