我有一个名为selectedTagArray的数组。它包含一系列字符串,零,'一个'两个'三个'。当使用类" .navitem"单击按钮时,将启动一个功能。当这个功能无关时,它会检查是否有类" .tags"内容包括与数组中的一个或多个项匹配的任何术语。如果spans内容确实包含在数组中找到的字符串,则该函数返回true,如果它没有返回false。
因为数组可能是任意长的,并且没有办法知道数组有多长,所以编写一堆逻辑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 :(得分:1)
你会想要这样的东西:
selectedTagArray.forEach((tag) => {
if (item.values().tags.includes(tag) {
return true;
}
});
return false;
如果找到其中一个选定的标签,则此循环将提前返回。如果没有找到任何标签,那么我们将简单地返回false。这是一个很好的设计,因为它现在允许您简单地修改selectedTagArray而不必更新'或'逻辑。
答案 1 :(得分:0)
下面的内容应该有效:
function(item) {
for(i = 0;i<selectedTagArray.length;i++){
if(item.values().tags.includes(selectedTagArray[i])){
return true;
}
}
return false;
}
}
答案 2 :(得分: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>