javascript使用或运算符迭代字符串列表

时间:2016-07-28 16:53:36

标签: javascript operators

我遇到以下代码时出现问题:

var fileheader = ["GENE_NAME", "3", "4", "1", "2", "logFC", "logCPM", "PValue", "FDR"]
for (var j = 0; j < fileheader.length; j++) {
  if (fileheader[j] !== ('GENE_NAME' || 'logCPM' || 'logFC' || 'FDR' || 'PValue')) {
    console.log(fileheader[j])
  }
}

我预计只会显示值“3”,“4”,“1”和“2”,但是它们都显示出来,我不明白为什么。

4 个答案:

答案 0 :(得分:6)

尝试编写代码,

var fileheader = ["GENE_NAME", "3", "4", "1", "2", "logFC", "logCPM", "PValue", "FDR"];
var filter = ['GENE_NAME', 'logCPM', 'logFC', 'FDR', 'PValue'];
for (var j=0; j<fileheader.length; j++){
    if (!filter.includes(fileheader[j])){
        console.log(fileheader[j])
    }
}

关于使用Array.prototype.includes()

的注意事项

这是ES6的新版本,它的浏览器支持有限。即使在最近的版本中,它也不支持IE。作为替代方案,您可以使用Array.prototype.indexOf()。使用它将为您提供匹配元素的索引,如果没有匹配,则它将返回-1。基于此,您可以修改您的代码。

现在让我们来解决代码中存在的问题,

看看下面的代码段,

('GENE_NAME'||'logCPM'||'logFC'||'FDR'||'PValue')

始终会评估为'GENE_NAME'。所以你的代码非常相似,

var fileheader = ["GENE_NAME", "3", "4", "1", "2", "logFC", "logCPM", "PValue", "FDR"]
for (var j=0; j<fileheader.length; j++){
    if (fileheader[j] !== 'GENE_NAME'){
        console.log(fileheader[j])
    }
}

答案 1 :(得分:6)

不幸的是,这不是||运算符的工作方式。你必须写:

fileheader[j] !== 'GENE_NAME' || fileheader[j] !== 'logCPM' // ...etc

另一个选择是创建一个数组并使用indexOf

if (['GENE_NAME', 'logCPM', 'logFC', 'FOR', 'PValue'].indexOf(j) < 0) {
}

如果您只担心较新的浏览器,您也可以使用includes代替indexOf

答案 2 :(得分:2)

如果您的目标是仅显示数字,则可以使用isNaN

var fileheader = ["GENE_NAME", "3", "4", "1", "2", "logFC", "logCPM", "PValue", "FDR"]
for (var j=0; j<fileheader.length; j++){
    if (!isNaN(fileheader[j])){
        console.log(fileheader[j])
    }
}

答案 3 :(得分:0)

通常||用于评估一系列条件,评估为真/假的表达式,某些值或无值,或类似场景。

你可以做很酷的事情,如果你用它来控制每个表达式返回值的执行顺序,因为它在第一次 评估之后停止到

它被称为逻辑或,但它在JavaScript(EcmaScript)中返回不同的东西。显然是序列中的第一个String。 剩下的就足够了。除了第一个之外的所有人都是不平等的。

以下是解释:

  

逻辑运算符通常与布尔(逻辑)值一起使用;   当它们是时,它们返回一个布尔值。和&amp;&amp;和||运营商   实际上返回一个指定操作数的值,所以如果   这些运算符与非布尔值一起使用,它们可能返回一个   非布尔值。逻辑运算符在中描述   下表。

     

如果可以转换为true,则返回expr1 ;否则,返回   表达式2。

https://developer.mozilla.org/de/docs/Web/JavaScript/Guide/Ausdruecke_und_Operatoren#Logical_operators