可用字符串检入for循环

时间:2012-06-27 08:07:20

标签: javascript string if-statement for-loop

我有这些猫品种

cats = [
'Abyssinian',
'Balinese',
'Bombay',
'Birman'];

现在编写的代码通常是这样的

 for(var i in cats)
 {
  ... do
 }

现在我必须在javascript中修改相同的功能。我只能修改以查看iBalinese还是Bombay中的任何一个..然后执行这些

我在想

 for(var i in cats)
 {
  if(i == 'Balinese' || i == 'Bombay'){
  ... do
  }
 }

相反,我希望i包含Balinese,Bombay而不是在中间写|子句?

 for(var i in cats)
 {
  if(i.contains('Balinese', 'Bombay'){   //this would be better, suggestions?
  ... do
  }
 }

如何?

5 个答案:

答案 0 :(得分:1)

试用此代码,

这会在不受支持的浏览器中添加.indexOf()

if (!Array.prototype.indexOf) {  
    Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {  
        "use strict";  
        if (this == null) {  
            throw new TypeError();  
        }  
        var t = Object(this);  
        var len = t.length >>> 0;  
        if (len === 0) {  
            return -1;  
        }  
        var n = 0;  
        if (arguments.length > 0) {  
            n = Number(arguments[1]);  
            if (n != n) { // shortcut for verifying if it's NaN  
                n = 0;  
            } else if (n != 0 && n != Infinity && n != -Infinity) {  
                n = (n > 0 || -1) * Math.floor(Math.abs(n));  
            }  
        }  
        if (n >= len) {  
            return -1;  
        }  
        var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);  
        for (; k < len; k++) {  
            if (k in t && t[k] === searchElement) {  
                return k;  
            }  
        }  
        return -1;  
    }  
} 

在Array原型中添加contains方法

 Array.prototype.contains = function(){ 
       for(var i=0,len=arguments.length;i<len;i++){
          if(this.indexOf(arguments[i]) !== -1){ 
              return true;
          } 
       }
       return false;
    }

现在,您可以这样使用,

var cats = [
'Abyssinian',
'Balinese',
'Bombay',
'Birman'];

if(cats.contains('Balinese')){
  console.log('Balinese');
}

if(cats.contains('Balinese','Bombay')){
  console.log('Balinese,Bombay');
}

if(cats.contains('lines','Bombay')){
  console.log('lines,Bombay');
}

if(cats.contains('lines','mbay')){
  console.log('lines,mbay');
}

如果您正在使用jQuery,则可以使此代码更简单:)

答案 1 :(得分:0)

尝试嵌套循环?

var cats = ["Abyssinian", "Balinese", "Bombay", "Birman"];
var thisAndThat = ["Abyssinian", "Apple", "Siberian", "Windows", "StackOverflow"];

for(var i in cats) {
    for(var x in thisAndThat) {
        if(cats[i] == thisAndThat[x]){
            ... do
        }
    }
}

使用jQuery

$.each(thisAndThat, function(key, value){
  if( $.inArray(value, cats) > -1 ){
    alert(value+" is inside the cats array.");
  }
});

答案 2 :(得分:0)

检查此代码,

var cats=['Abyssinian', 'Balinese', 'Bombay', 'Birman'];

Array.prototype.contains=function(incattype){

    for(var i=0; i<cats.length;i++){

        if(cats[i]==incattype) {
            return true;
        } else{
             return false;
        }      
    }
};


  var catslist=['Abyssinian', 'Balinese', 'Bombay11' ];

    for(var i=0; i<catslist.length;i++){

        document.write(cats.contains(catslist[i]));
    }        

链路; -

http://jsfiddle.net/fPdej/2/

答案 3 :(得分:0)

首先,重要的是要意识到如果您使用for...in遍历javascript数组,则必须使用hasOwnProperty方法:

for(var i in cats){
    if(cats.hasOwnProperty(i))
        console.log(cats[i]);        
}

你真的应该这样使用for(;;)

for(var i=0;i<cats.length;i++){
   console.log(cats[i]);
}

除此之外,你正在寻找Array.indexOf,它得到了现代浏览器的支持,但在旧版浏览器中的支持可能较少 - 这就是为什么大多数框架(jQuery,Moo,原型等)都定义了自己的变体此方法(有关详细信息,请参阅this question's answers)。

var cats = ["Abyssinian","Balinese","Bombay","Birman"];

var test = ["Abyssinian","Balinese"];

for(var i in cats){
    if(cats.hasOwnProperty(i) && test.indexOf(cats[i]) != -1)
        console.log(cats[i]);        
}

实例:http://jsfiddle.net/4xJsg/

答案 4 :(得分:0)

不建议使用for-in循环,因为它们比for,while或do-while慢七倍。而不是for-in,你也可以使用for-each,它不像for或while那样快,但更像是for-in循环。

将它与正则表达式结合起来,我的方法是:

var cats = [
    'Abyssinian',
    'Balinese',
    'Bombay',
    'Birman'
];

cats.forEach(function(cat, index){
    if(cat.match(/Abyssinian|Birman/)){
    // Do what you want
    }
});