2016-09-22 8 views
2

以下はtrueCoffeeScriptの - "で" と、サブストリングを見つけるのCoffeeScriptで

"s" in "asd" # true 

を与えるが、これは

"as" in "asd" # false 
  • はなぜこれをある偽与えますか?
  • これは1文字以上の文字列で起こりますか?
  • inはこのタスクには適していませんか?
+2

を使用することを忘れないでください。答えを受け入れなさい、それは素晴らしいものです! – IanS

+1

ありがとう!忘れてた! –

答えて

3

x in y syntax from coffeescriptは、yが配列またはオブジェクトのような配列であると予想しています。文字列を指定すると、文字配列に変換されます(直接ではありませんが、配列のように文字列のインデックスに対して繰り返し処理されます)。

だから、inの使用:

"as" in "asd" 
# => false 

は、falseを返す理由は非常に簡単である。この方法で

"as" in ["a","s","d"] 
# => false 

に相当します。

は、アレイは、通常、むしろ心bogglinglyまだ必要とのindexOf()で行われているの内側に値があるかどうかを確認するための検査に含まれるもの:

little book of coffeescriptが、これはinに言っていますシム、それはInternet Explorerがそれを実装していない。

var included = (array.indexOf("test") != -1) 

のCoffeeScriptはPythonists、すなわちで、認識することができる本のニートの代替を有する。舞台裏

included = "test" in array 

、のCoffeeScriptはArray.prototype.indexOf()を使用して、必要に応じてシミング、です値が配列内にあるかどうかを検出します。残念なことに、これは同じ構文が文字列では機能しないことを意味します。結果が負の場合我々はバックのindexOfを(使用に戻す必要がある)とテスト:

included = "a long test string".indexOf("test") isnt -1 

またはより良い、ビット演算子を乗っ取るので、我々は-1の比較を行う必要はありません。

string = "a long test string" 
included = !!~ string.indexOf "test" 

個人的に、私は、ビットごとのハッキングは非常に読みやすいではなく、避けるべきであると言うでしょう。

私はindexOfのいずれかであなたの小切手を書きます。

"asd".indexOf("as") != -1 
# => true 

または正規表現一致で:

/as/.test "asd" 
# => true 

か、ES6を使用している場合は、String#includes()