如何更改此if语句的逻辑

时间:2013-12-03 16:36:00

标签: javascript arrays loops if-statement

我想检查一个数组元素是否包含在另一个数组中,到目前为止我已尝试过这两种方法,即使ignoreList包含该元素,它们也只执行true。

for (email in emailList) {

        if(!(emailList[email].to.toLowerCase() in ignoreList)){
        //if(ignoreList.indexOf(emailList[email].to.toLowerCase()) == -1){

我尝试了评论和未评论的方式。

从高层面来看。我想检查emailList中的电子邮件是否包含在ignoreList中,如果它在ignoreList中,那么我不希望它执行。

4 个答案:

答案 0 :(得分:1)

试试这个:

for (var i = 0; i < emailList.length; i++){ 
    if (ignoreList.indexOf(emailList[i].toLowerCase()) !== -1)
        // Your code to deal with the ignored email here
}

较旧的浏览器没有数组的indexOf,因此您可能需要添加此原型:

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function (obj, start) {
        for (var i = (start || 0), j = this.length; i < j; i++) {
            if (this[i] === obj) { return i; }
        }
        return -1;
    };
}

答案 1 :(得分:1)

for (var i=0;i<emailList.length;i++) {
    for (var j=0;j<ignoreList.length;j++) {
        if (emailList[i].toLowerCase() != ignoreList[j]) //or whatever logic you're trying to pull off here
    }
}

这将迭代BOTH数组,检查每个可能的电子邮件组合以忽略,并且您可以这样使用更简单的if语句

答案 2 :(得分:0)

您在in子句中滥用if。请参阅示例MDN docs for in

  

语法:objectName中的prop

     


      表示属性名称或的字符串或数字表达式   数组索引。

并且您正试图在some@example.com ['some@example.com', 'some1@example.com']内检查false

答案 3 :(得分:0)

如果您可以使用Underscore.js,那么in的所有问题或for的样板文件都非常简单:

_.each( emailList, function( email ) {
  if ( !_.contains( ignoreList, email ) ) {
    // ...
  }
});

如果您可以更改数据,那么emailList的格式与ignoreList(一组简单的电子邮件地址字符串)相同,即使更好:

_.each( _.difference( emailList, ignoreList ), function( email ) {
  // ...
});