0

我有这些猫品种

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

现在写的代码一般是这样的

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

现在我必须在 javascript 中修改相同的函数。我只能修改看看是否i是任何BalineseBombay..然后做这些

我在想

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

相反,我想要像icontains之类的东西,而不是在中间Balinese,Bombay写子句?|

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

如何?

4

5 回答 5

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,这段代码可以变得更简单:)

于 2012-06-27T08:40:33.150 回答
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.");
  }
});
于 2012-06-27T08:17:09.363 回答
0

首先,重要的是要意识到,如果您正在遍历一个 javascript 数组,for...in那么您必须使用该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、原型等)定义了他们自己的这种方法的变体(参见这个问题的答案更多详情)。

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/

于 2012-06-27T08:28:00.373 回答
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
    }
});
于 2012-06-27T08:32:54.333 回答
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/

于 2012-06-27T08:24:25.430 回答