strings_to_check = ["a", "b", "c"]
test_arrrays = [ [ "a", "c", "e", "g"], [ "v", "x", "y", "z"] ]
检查test_arrays
中的每个数组是否包含any
数组中strings_to_check
个字符串的正确方法是什么 - 即。 a, b or c
我可以做到以下几点,但它的缺点是,即使其中一个字符串存在,它仍会检查其余部分。
for(let i = 0; i < test_arrrays.length; i++){
for(let j = 0; j < strings_to_check.length; j++){
if(test_arrrays[i].indexOf(strings_to_check[j]) > -1) {
console.log("matched");
}
}
}
答案 0 :(得分:1)
假设您要检查test_arrays
中的每个数组是否包含strings_to_check
数组中的至少一个元素,您可以使用Array#every
和Array#some
的混合var strings_to_check = ["a", "b", "c"],
test_arrrays = [ [ "a", "c", "e", "g"], [ "v", "x", "y", "z"] ],
res = test_arrrays.every(v => v.some(c => strings_to_check.indexOf(c) > -1));
console.log(res);
函数。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:key name="ref-per" match="ProtectionOrderResponse/Person" use="@id"/>
<xsl:key name="ref-loc" match="PersonLocationAssociation/LocationReference" use="../PersonReference/@ref"/>
<xsl:template match="ProtectionOrderResponse">
<xsl:apply-templates select="key('ref-per', 'PRTPER1')"/>
</xsl:template>
<xsl:template match="Person">
<xsl:variable name="ref" select="key('ref-loc', @id)/@ref"/>
<xsl:value-of select="$ref"/>
</xsl:template>
</xsl:stylesheet>
&#13;
答案 1 :(得分:1)
使用更高阶函数可以更简单地完成,而不是使用for循环和大量索引。
我们希望了解所有test_arrrays
元素是否符合某些条件,因此我们知道应该使用every
:
test_arrrays.every(/* some criteria */);
现在我们必须找出那个标准。 &#34;包含strings_to_check&#34;中的任何字符串。听起来我们需要在some
上使用test_array
,以确定strings_to_check
中是否包含任何字符串。所以我们的标准&#34;将是:
test_arrray => test_arrray.some(s => strings_to_check_set.includes(s))
把它放在一起,我们得到:
test_arrrays.every( test_arrray =>
test_arrray.some(s => strings_to_check_set.includes(s))
)
includes
具有线性时间复杂度,因此我们可以使用Set
改进此算法,并将includes
替换为has
,其具有恒定的时间复杂度。,以获得最终结果:
strings_to_check = ["a", "b", "c"]
test_arrrays = [ [ "a", "c", "e", "g"], [ "v", "x", "y", "z"] ]
strings_to_check_set = new Set(strings_to_check)
test_arrrays.every(test_arrray =>
test_arrray.some(s => strings_to_check_set.has(s))
)
答案 2 :(得分:1)
如果您有多个myString.replace('"{{', '{{').replace('}}"', '}}')
,则将test_arrrays
转换为strings_to_check
以进行常量时间查找是有意义的。总时间复杂度从O(mn)减少到O(m + n log n),其中n是Set
中元素的数量,m是所有strings_to_check
和O中元素的总数(n log n)是test_arrrays
设置时间。
通用Set
函数如下所示:
check
答案 3 :(得分:0)
如果您只需要匹配一个字符串,只需添加break
,就像这样:
for(/*loop settings*/){
/*some code*/
for(/*loop settings*/){
/*some code*/
if(/*some conditionnal statement*/){
/*handling stuff*/
break;
}
}
}
答案 4 :(得分:0)
正如Vivick所说,你必须通过添加assigned_roles.user_id
打破 for循环。
break
始终会停止不感兴趣的循环。
所以这就是你必须要做的事情:
break