2016-11-21 5 views
0

は、下記を参照してください。ユーザの入力に基づいてコードブロックを実行する最適な方法は、配列内の値と一致する場合です。私はこれを達成する2つの方法を試してみた

var cat = ['travel', 'business', 'environment', 'culture', 'football', 'politics', 'world', 'commentisfree', 'lifestyle', 'fashion', 'technology', 'sport', 'money', 'science']; 

var userInput = $("#mySearch").val(); 

for(var i=0; i < cat.length; i++){ 
    if (userInput == cat[i]){ 
     // do something 
    }else{ 
     // do something else 
    } 
} 

をこれが働いて、それが値を見つけるまでしかし、他の条件が実行されました。私はその後、以下に配列を失うことを試みた:

var userInput = $("#mySearch").val(); 

if (userInput == 'travel' || 'business' || 'environment' || 'culture' || 'football' || 'politics' || 'world' || 'commentisfree' || 'lifestyle' || 'fashion' || 'technology' || 'sport' || 'money' || 'science'){ 
    // do something 
}else{ 
    // do something else 
} 

この方法でも動作します、しかし、それは条件ブラケット(なぜ??全くわからない)との間でない値のために発生します。説明と解決策は大歓迎です!私はあなたがjQueryのを使用しているので、あなたは以下を使用することができますJS

+0

試してみる[.find()](HTTPSの要素があるかどうかを確認するために: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)または[.indexOf()](https://developer.mozilla.org/nl/docs/Web/ JavaScript/Reference/Global_Objects/Array/indexOf) –

+0

よく考えてみてください一致するものがあればすべての繰り返しをチェックする必要があるので、elseで実行しないでください。あなたがすべての値を越えるまで、一致がないかどうかは分かりません。それはどういう意味ですか?ループが終了して何も見つからない場合にのみ実行します... – epascarello

答えて

0

に新たなんだ:

if ($.inArray(userInput, cat) > -1) { 
    // Do something 
} else { 
    // Do something else 
} 

役に立てば幸い!あなたはそれが価値が他の配列-1

var cat = ['travel', 'business', 'environment', 'culture', 'football', 'politics', 'world', 'commentisfree', 'lifestyle', 'fashion', 'technology', 'sport', 'money', 'science']; 

var userInput = $("#mySearch").val(); 

if(cat.indexOf(userInput) !== -1){ 
    //present 
}else{ 
    //absent 
} 
+0

vanilla JSを使いたいなら、 'indexOf'を使うことができます。あなたはそれについてもっと読むことができます:http://www.w3schools.com/jsref/jsref_indexof.asp –

+0

ありがとう、ここでは "** - 1 **"は何ですか? – Chima

+0

心配ありません:) 'inArray'のドキュメントはhttps://api.jquery.com/jQuery.inArray/です。配列に値が見つからない場合、関数は-1を返します。それが配列内にある場合、関数は値を見つけた場所のインデックスを返します。これがあなたを助けてくれたと思ったら、正解/ upvoteとしてマークすることを覚えておいてください:) –

0

。私がある、我々は最初の部分の評価がtrueの理由は、それが 『ビジネス「のtruthyらし」』をテストするということです

if (userInput == 'travel' || 'business' || 'environment' || 'culture' || 'football' || 'politics' || 'world' || 'commentisfree' || 'lifestyle' || 'fashion' || 'technology' || 'sport' || 'money' || 'science'){ 
 
    // do something 
 
}

を持っているあなたの第二部、始めましょうあなたの最初のif/elseステートメントでは、elseを取り除くことができると思いますが、これは本当に便利です。これにより、if条件が満たされない限り、何かが実行されるのを防ぐことができます。

「のindexOf」機能は、一致するアイテムのアレイ又は「-1」がある場合に該当する項目にインデックスを戻します

var cat = ['travel', 'business', 'environment', 'culture', 'football', 'politics', 'world', 'commentisfree', 'lifestyle', 'fashion', 'technology', 'sport', 'money', 'science']; 

var userInput = $("#mySearch").val(); 

// Check to see if the user input is in the array. 
if(cat.indexOf(userInput) !== -1) { 
    // Input matches an array item lets do some stuff. 
} 

+0

これに感謝しますが、 "** - 1 **" – Chima

+0

@Chima要素が配列内に存在する場合、配列内のその要素のインデックスを0からlength-1に戻しますが、要素が存在しない場合は-1を返します。したがって、要素が存在しないことを示す-1として-1を使用できます。 –

0

で見つかった場合、これは興味深いものである現れるインデックスを返しますのindexOfを使用していないのはなぜ

0

ここではJQueryを必要としない解決策です。

0

私は.filterで望ましくない値を除外し、希望するコードを実行します。このようにして、userInputが範囲内にない値になり、有効な入力があるときにのみコードを実行するという状況を回避できます。

var cat = [vals...]; 
var userInput = $("#mySearch").val(); 

const inCategories = (item, i, arr) => { 
    return arr.indexOf(userInput) !== -1; }; 
}; 

if (cat.filter(inCategories).length > 0){ 
    // do stuff 
} 
0

あります内蔵のいくつかの()入力は配列

var cat = ['travel', 'business', 'environment', 'culture', 'football', 'politics', 'world', 'commentisfree', 'lifestyle', 'fashion', 'technology', 'sport', 'money', 'science']; 
 
var input = 'world'; 
 
if (cat.some(x => x === input)) console.log(input + " is a category"); 
 
else console.log(input + " is not a category");

関連する問題