用for循环替换一系列逻辑OR运算符

时间:2017-09-05 01:46:23

标签: javascript

我有一个名为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;
    }

  });
});

3 个答案:

答案 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>