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

for-in ループは、for、while、または do-while ループよりも最大 7 倍遅いため、使用することはお勧めしません。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"];
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

このコードをチェックして、

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 に答える
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 に答える