2017-09-05 28 views
0

我有一个名为selectedTagArray的数组。它包含一系列字符串,“零”,“一”,“二”,“三”。当一个按钮被点击“.navitem”类时,就会启动一个功能。当这个函数被赋值时,它会检查一个带有类“.tags”内容的跨度是否包含与数组中的一个或多个项匹配的任何项。如果跨度内容确实包含在数组中找到的字符串,则该函数返回true,如果该函数没有返回false。使用for循环替换一系列逻辑或运算符

因为数组可能是任意长的,并且没有办法知道数组会多长时间,所以编写一堆逻辑OR运算符是没有意义的。

我该如何将我的代码转换为包含一个for循环,该循环只是简单地循环遍历数组替代索引位置,而不必写出多行相同的代码?

<span class="tags">zero</span> // True 
<span class="tags">one, three</span> // True 
<span class="tags">two, four</span> // True 
<span class="tags">four</span> // False 



var selectedTagArray = ['zero', 'one', 'two', 'three']; 

$(".navitem").click(function() { 

    featureList.filter(function(item) { 

    if (
     (item.values().tags.includes(selectedTagArray[0])) || 
     (item.values().tags.includes(selectedTagArray[1])) || 
     (item.values().tags.includes(selectedTagArray[2])) || 
     (item.values().tags.includes(selectedTagArray[3])) 
     ) 
    { 
     return true; 
    } else { 
     return false; 
    } 

    }); 
}); 
+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/一些 – Slai

回答

0

类似下面应该工作:

function(item) { 
for(i = 0;i<selectedTagArray.length;i++){ 
    if(item.values().tags.includes(selectedTagArray[i])){ 
     return true; 
    } 
    } 
return false; 
} 
} 
+0

此解决方案似乎不起作用。我尝试了一些类似的东西,然后试图自己解决。我相信这个问题是,在每个循环中,函数都会重新评估span是否包含下一个字符串。如果span在第一个循环中包含该字符串,但在第二个循环中不包含第二个字符串,则第一个循环的真正返回值仅替换为第二个循环中的返回值为false。因此,与一系列OR运算符不同,只有数组中的最后一个值被考虑。 – John

1

你会想是这样的:

selectedTagArray.forEach((tag) => { 
    if (item.values().tags.includes(tag) { 
     return true; 
    } 
}); 
return false; 

如果发现所选择的标签之一,这个循环将提前返回。如果找不到任何标签,那么我们将简单地返回false。这是一个很好的设计,因为它现在允许你简单地修改selectedTagArray,而不必更新你的'或'逻辑。

+0

'Array.prototype.some'实际上更适合这个。 – Li357

0

使用Array.from另一种方式

$(function(){ 
 
    $("#check").click(function(){ 
 
     var selectedTagArray = ['zero', 'one', 'two', 'three']; 
 
     var val = Array.from($(".tags"), (el,i) => $(el).text().includes(selectedTagArray[i])); 
 
     console.log(val); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span class="tags">zero</span><br/> 
 
<span class="tags">one, three</span><br/> 
 
<span class="tags">two, four</span><br/> 
 
<span class="tags">four</span><br/> 
 

 
<button id="check">Click</button>