Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有多个StartWith和endsWith参数的筛选器数组_Javascript - Fatal编程技术网

Javascript 具有多个StartWith和endsWith参数的筛选器数组

Javascript 具有多个StartWith和endsWith参数的筛选器数组,javascript,Javascript,浏览了围绕此问题的几个不同问题/答案,但大多数问题/答案依赖于包含或索引 问题:如何筛选任何数组(本例中为名称)。我需要使用两个不同的数组对其进行过滤,其中一个数组具有startsWith标准,另一个具有endsWith标准 var names = ['BOB','CATHY','JAKOB','AARON','JUSTICE','BARBARA','DANIEL','BOBBY','JUSTINE','CADEN','URI','JAYDEN','JULIE'] startPatterns =

浏览了围绕此问题的几个不同问题/答案,但大多数问题/答案依赖于
包含
索引

问题:如何筛选任何数组(本例中为
名称
)。我需要使用两个不同的数组对其进行过滤,其中一个数组具有
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']
显然,您不能执行
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)

您可以构建一个正则表达式,并根据模式检查字符串

var name=['BOB'、'CATHY'、'JAKOB'、'AARON'、'JUSTICE'、'BARBARA'、'DANIEL'、'BOBBY'、'JUSTINE'、'CADEN'、'URI'、'JAYDEN'、'JULIE'],
startPatterns=['BO','JU'],
endPatterns=['EN','ICE'],
regexp=newregexp(`^(${startPatterns.join('|')})|(${endPatterns.join('|')})$`),
结果=names.filter(s=>regexp.test);

控制台日志(结果)您可以构建正则表达式并根据模式检查字符串

var name=['BOB'、'CATHY'、'JAKOB'、'AARON'、'JUSTICE'、'BARBARA'、'DANIEL'、'BOBBY'、'JUSTINE'、'CADEN'、'URI'、'JAYDEN'、'JULIE'],
startPatterns=['BO','JU'],
endPatterns=['EN','ICE'],
regexp=newregexp(`^(${startPatterns.join('|')})|(${endPatterns.join('|')})$`),
结果=names.filter(s=>regexp.test);

控制台日志(结果)您可以使用阵列.prototype.pattern阵列上的一些
来实现这一点:

let filtered = names.filter(name => (
  startPatterns.some(pattern => name.startsWith(pattern)) ||
  endPatterns.some(pattern => name.endsWith(pattern))
))

如果名称以至少一个开始模式开始或以至少一个结束模式结束,则此处的逻辑为“Return
true
”。

您可以使用
Array.prototype。模式数组上的一些
实现此目的:

let filtered = names.filter(name => (
  startPatterns.some(pattern => name.startsWith(pattern)) ||
  endPatterns.some(pattern => name.endsWith(pattern))
))


这里的逻辑是“Return
true
如果名称以至少一个开始模式开始,或者以至少一个结束模式结束”。

您的代码正常工作,只是重复出现问题。一种更简单的方法是
names.filter(name=>startPatterns.some(p=>name.startsWith(p))| | endPatterns.some(p=>name.endsWith(p))
forEach
不返回任何内容,因此使用表达式体函数时,
会被滥用:
为了
推送
您的代码工作,它只会遇到重复代码的问题。一种更简单的方法是
names.filter(name=>startPatterns.some(p=>name.startsWith(p))| | endPatterns.some(p=>name.endsWith(p))
forEach
不返回任何内容,因此使用表达式体函数时,
被滥用:
推送
这将在引入非标准输入时失败,即使是像ROB先生这样简单的东西,由于连接到一个正则表达式中,我更喜欢djfdev的
数组solution@Klaycon,请参阅第二种方法。一旦引入非标准输入,此方法将失败,即使是像ROB先生这样简单的东西,由于连接到一个正则表达式中,我更喜欢djfdev的
数组solution@Klaycon,请参阅第二种方法。这是可行的,但如果startPatterns或endPatterns中的一个为空/空怎么办?这不是原始问题的一部分。在这两种情况下,您的期望是什么?您可以使用条件和/或默认值,具体取决于您所期望的内容。它可能是这样的:
(startPatterns&&startPatterns.some(pattern=>name.startsWith(pattern)))| |(endPatterns&&endPatterns.some(pattern=>name.endsWith(pattern))
djfdev是正确的。这超出了讨论的范围。他的回答是正确的。对不起,我不是故意说那不是一个有效的问题。但我认为答案取决于你的要求。@reg的提示可能会根据这一点起作用(即,仅检查阵列是否存在)。但是,也许您的要求是,空模式数组意味着没有名称是有效的。这是可行的,但是如果startPatterns或endPatterns中的一个为空/空呢?这不是最初问题的一部分。在这两种情况下,您的期望是什么?您可以使用条件和/或默认值,具体取决于您所期望的内容。它可能是这样的:
(startPatterns&&startPatterns.some(pattern=>name.startsWith(pattern)))| |(endPatterns&&endPatterns.some(pattern=>name.endsWith(pattern))
djfdev是正确的。这超出了讨论的范围。他的回答是正确的。对不起,我不是故意说那不是一个有效的问题。但我认为答案取决于你的要求。@reg的提示可能会根据这一点起作用(即,仅检查阵列是否存在)。但您的需求可能会说,空模式数组意味着没有名称是有效的。