浏览了围绕这个问题的几个不同的问题/答案,但大多数依赖includes
或indexOf
问题:如何过滤任何数组(names
在这种情况下)。我需要使用 2 个不同的数组对其进行过滤,其中一个具有startsWith
条件,另一个具有endsWith
条件
var names = ['BOB','CATHY','JAKOB','AARON','JUSTICE','BARBARA','DANIEL','BOBBY','JUSTINE','CADEN','URI','JAYDEN','JULIE']
startPatterns = ['BO','JU']
endPatterns = ['EN','ICE']
//res = ['BOB','JUSTICE','JUSTINE','JULIE','JAYDEN','JUSTICE']
Run Code Online (Sandbox Code Playgroud)
显然你不能这样做,names.filter(d => d.startsWith(startPatterns))
因为startPatterns
它不是一个字符串而是一个数组。像这样的东西不起作用,而且速度也很慢:
res=[]
names.forEach(d => {
endPatterns.forEach(y => d.endsWith(y) ? res.push(d) : '')
startPatterns.forEach(s => d.startsWith(s) ? res.push(d) : '')})
console.log(res)
Run Code Online (Sandbox Code Playgroud)
您可以Array.prototype.some
在模式数组上使用来实现这一点:
let filtered = names.filter(name => (
startPatterns.some(pattern => name.startsWith(pattern)) ||
endPatterns.some(pattern => name.endsWith(pattern))
))
Run Code Online (Sandbox Code Playgroud)
这里的逻辑是“true
如果名称以至少一种开始模式开始或以至少一种结束模式结束,则返回”。
归档时间: |
|
查看次数: |
882 次 |
最近记录: |