stringクラスのsplitとarrayクラスのjoinを使えば、不純物探知ができるよねというお話。
以下のコードを例に取ります。
var hello = "hellohellohellohellohelloohello";
var exceptForHello = hello.split('hello').join('');
if(exceptForHello !== '') {
console.log('Not pure! ' + exceptForHello + ' is founded!');
}
最初にhelloがたくさん並んだ文字列があります。一見、すべてhelloに見えますね。
次に、split('hello').join('')をしています。これは文字列を配列化して、さらに文字列に戻しています。
配列化の際に、splitの引数で文字列を区切る事ができます。
その区切り文字としてhelloを指定すると、結果的にhelloを削ぎ落とすことができます。
'hello,hello,hello'
たとえば上記の文字列にsplit(',')とすると、
['hello', 'hello', 'hello']となります。
これは、カンマを捨てたことに等しいです。
この仕様を利用したのが、先述のhelloの削ぎ落としです。これよって、不純物のみが抽出されます。その上でjoinを使って配列要素を連結します。これが不純物の文字列です。
この文字列の長さが0ならば、つまり1文字もなければ不純物は無いということになります。
splitを多重にかけることによって、複数条件で絞り込むこともできますね。
ただし、文字列置換のような不足の事態は起こり得ますが…。
参考:
このテクニックは、競技プログラミングのこちらの回答を見て発見しました。感謝です。
http://abc023.contest.atcoder.jp/submissions/401872