我想通过排除包含黑名单数组中任何子字符串的URL来过滤URL数组。
const urls = [
'http://example.com/people/chuck',
'http://example.com/goats/sam',
'http://example.com/goats/billy',
'http://example.com/goats/linda',
'http://example.com/cows/mary',
'http://example.com/cows/betty',
'http://example.com/people/betty']
const blacklist = ['cows', 'goats']
let cleanUrls = [];
我可以使用for循环来做到这一点,但我想使用filter和/或reduce来找到一种简洁的方法。
如果我不需要遍历x个黑名单项目:
cleanUrls = urls.filter( url => !url.includes(blacklist[0]) )
.filter( url => !url.includes(blacklist[1]) )
我也不想只使用forEach或map遍历黑名单,因为如果特定的网址与任何黑名单条目匹配,我想立即停止。
请使用普通的JS。谢谢。:)
您可以这样使用filter()
:
const cleanUrls = urls.filter(u => blacklist.every(s => !u.includes(s)));
要么
const cleanUrls = urls.filter(u => !blacklist.some(s => u.includes(s)));
描述:
.includes()
将检查子字符串是否与另一个字符串一起存在。.every()
将检查blacklist
特定URL中是否不存在数组的字符串。.some()
将检查blacklist
特定URL中是否存在任何字符串数组。.filter()
将仅选择将通过测试的那些URL。演示:
const urls = [
'http://example.com/people/chuck',
'http://example.com/goats/sam',
'http://example.com/goats/billy',
'http://example.com/goats/linda',
'http://example.com/cows/mary',
'http://example.com/cows/betty',
'http://example.com/people/betty'
];
const blacklist = ['cows', 'goats'];
const cleanUrls = urls.filter(u => blacklist.every(s => !u.includes(s)));
console.log(cleanUrls);
文件:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句