Jun*_*tae 24 javascript arrays string
如何检查字符串是否包含数组的任何元素?如果元素有一些字符串,我想过滤一些数组.请看下面的代码.
var arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];
function checker(value) {
var prohibited = ['banana', 'apple'];
for (var i = 0; i < prohibited.length; i++) {
if (value.indexOf(prohibited[i]) == -1) {
return true;
} else {
return false;
}
}
}
arr = arr.filter(checker);
console.log(arr);Run Code Online (Sandbox Code Playgroud)
结果是[ 'apple', 'kiwi', 'orange' ].本'apple'应该得到去除,但事实并非如此.
上面的代码只过滤了'banana',而不是'apple'.我有很多关键字要过滤.有没有更简单的方法?
gho*_*end 32
您可以使用some()function : 检查字符串是否包含数组的任何元素。
例如
var fruitsArr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];
var myString = "I have an apple and a watermelon.";
var stringIncludesFruit = fruitsArr.some(fruit => myString.includes(fruit));
Run Code Online (Sandbox Code Playgroud)
这个功能很新。some()方法接受一个回调,您可以在其中定义要验证的条件,并返回一个布尔值。检查上面链接中的文档。
Mic*_*ski 26
它可以很简单:
const arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];
const checker = value =>
!['banana', 'apple'].some(element => value.includes(element));
console.log(arr.filter(checker));Run Code Online (Sandbox Code Playgroud)
ECMAScript 6 FTW!
在checker使用箭头功能.
这!意味着它将排除所有不符合条件的元素.
该
some()方法测试数组中的某个元素是否通过了由提供的函数实现的测试.
来自Array.prototype.some()MDM的文档
该
includes()方法确定是否可以在另一个字符串中找到一个字符串,返回true或false视情况而定.
来自String.prototype.includes()MDM的文档
由于所有浏览器都不支持某些最新的ECMAScript功能,因此您应该使用Babel将代码编译为ECMAScript 5.
Pra*_*lan 18
问题在于for循环,它只返回一次,因为返回结束了函数,切断了进程中的for循环.因此,您可以更新代码,以便只在for循环完成后才返回该函数.
var arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];
function checker(value) {
var prohibited = ['banana', 'apple'];
for (var i = 0; i < prohibited.length; i++) {
if (value.indexOf(prohibited[i]) > -1) {
return false;
}
}
return true;
}
arr = arr.filter(checker);
console.log(arr);Run Code Online (Sandbox Code Playgroud)
为了减少您可以使用的功能every()和indexOf()方法
'every'方法对数组中存在的每个元素执行一次提供的回调函数,直到找到一个回调返回伪值的值(转换为布尔值时变为false的值).如果找到这样的元素,则every方法立即返回false.否则,如果回调为所有元素返回了一个true值,则每个元素都将返回true.仅为已分配值的数组的索引调用回调; 对于已删除的索引或从未赋值的索引,不会调用它.(取自此处)
var arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];
function checker(value) {
var prohibited = ['banana', 'apple'];
return prohibited.every(function(v) {
return value.indexOf(v) == -1;
});
}
arr = arr.filter(checker);
console.log(arr);Run Code Online (Sandbox Code Playgroud)
对于旧浏览器,请检查每种方法的polyfill选项.
你甚至可以在这里使用正则表达式.使用数组生成正则表达式并用于test()检查匹配
var arr = ['banana', 'monkey banana', 'apple', 'kiwi', 'orange'];
function checker(value) {
var prohibited = ['banana', 'apple'];
var regex = new RegExp(prohibited.map(function(s) {
return s.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
}).join('|'));
return !regex.test(value);
}
arr = arr.filter(checker);
console.log(arr);Run Code Online (Sandbox Code Playgroud)
请参阅此答案以获取字符串到正则表达式转换:您可以使用字符串变量动态创建JavaScript正则表达式吗?
对于寻找简单单线的人:
arr.filter(item => !prohibited.some(prohb => item.includes(prohb))) // ["kiwi", "orange"]
Run Code Online (Sandbox Code Playgroud)