次のように、変数が値の範囲と等しいかどうかを判断する簡単な方法はありますか?
if x === 5 || 6
次のような鈍いものではなく:
if x === 5 || x === 6
?
次のように、変数が値の範囲と等しいかどうかを判断する簡単な方法はありますか?
if x === 5 || 6
次のような鈍いものではなく:
if x === 5 || x === 6
?
配列内に値をスタッシュし、次を使用して変数が配列内に存在するかどうかを確認できます[].indexOf
。
if([5, 6].indexOf(x) > -1) {
// ...
}
が返された場合-1
、変数は配列に存在しません。
実行しているテストの種類によって異なります。静的な文字列がある場合、これは正規表現を使用して非常に簡単に確認できます。
if (/^[56ab]$/.test(item)) {
//-or-
if (/^(foo|bar|baz|fizz|buzz)$/.test(item)) {
doStuff();
} else {
doOtherStuff();
}
値のセットが小さい場合 (文字列または数値)、次を使用できますswitch
。
switch (item) {
case 1:
case 2:
case 3:
doStuff();
break;
default:
doOtherStuff();
break;
}
値のリストが長い場合は、おそらく配列を~arr.indexOf(item)
、 またはとともに使用する必要がありarr.contains(item)
ます。
vals = [1,3,18,3902,...];
if (~vals.indexOf(item)) {
doStuff();
} else {
doOtherStuff();
}
残念ながらArray.prototype.indexOf
、一部のブラウザではサポートされていません。幸いなことに、ポリフィルが利用可能です。ポリフィルの問題が発生している場合はArray.prototype.indexOf
、 を追加することもできArray.prototype.contains
ます。
データを関連付ける方法に応じて、オブジェクト内に文字列の動的リストを他の関連情報へのマップとして格納できます。
var map = {
foo: bar,
fizz: buzz
}
if (item in map) {
//-or-
if (map.hasOwnProperty(item)) {
doStuff(map[item]);
} else {
doOtherStuff();
}
in
はプロトタイプ チェーン全体をObject.prototype.hasOwnProperty
チェックしますが、 はオブジェクトのみをチェックするため、これらは異なることに注意してください。
全然大丈夫です。値のリストが長い場合は、代わりに次を使用できます。
if ([5,6,7,8].indexOf(x) > -1) {
}
はい。独自の関数を使用できます。この例では次を使用します.some
。
var foo = [ 5, 6 ].some(function(val) {
return val === x;
});
foo; // true
これは私が使用することに決めたものです:
Object.prototype.isin = function() {
for(var i = arguments.length; i--;) {
var a = arguments[i];
if(a.constructor === Array) {
for(var j = a.length; j--;)
if(a[j] == this) return true;
}
else if(a == this) return true;
}
return false;
}
次のように使用します。
var fav = 'pear',
fruit = ['apple', 'banana', 'orange', 'pear'],
plu = [4152, 4231, 3030, 4409];
if (fav.isin(fruit, plu, 'eggs', 'cheese')) {
//do something cool
}
利点は次のとおりです。
型強制を許可したくない (許可indexOf
しない) 場合は、2 つ==
をに変更し===
ます。現状:
fav = "4231";
plu.indexOf(fav) //-1
fav.isin(plu) //true
いいえ、ケース固有のトリックがいくつかあるかもしれませんが、一般的に私は次のようなコードを書きます:
if (someVariable === 1 ||
someVariable === 2 ||
someVariable === 7 ||
someVariable === 12 ||
someVariable === 14 ||
someVariable === 19) {
doStuff();
moreStuff();
} else {
differentStuff();
}
簡単な答えはノーです。多数の文字列値を比較する場合は、switch ステートメントを使用すると読みやすくなりますが、2 つの値に対して使用すると見栄えがよくなりません。
[編集] これは機能しているように見えますが、Dan が指摘したように、実際には誤検知です。この方法は使用しないでください。教育目的のためにここに残します。
私が知っている最も簡単な方法:
a = [1,2,3,4,5];
if(3 in a) alert("true"); // will alert true
Chrome コンソールでテスト済み。他のブラウザで動作するかどうかは不明です。