2017-11-21 11 views
0

は、文字列の配列は、部分文字列を含んでいるかどうかを確認することが可能ですか?配列に完全な文字列の一致があるかどうかを調べる方法を知っています($ .inArray、arr.includes、arr.indexOfなどを使用します)。しかし、これらは文字列の配列に一致しません(少なくとも私にとっては)。私は、次のオプションを使用して<select multiple>要素がある場合配列に部分文字列が含まれているかどうかをどのように確認できますか?

は:

positive (selected) 
positron (selected) 
negative 
negatron 

をどのように私はpositvepositronの両方を選択していたことを示すために、私の複数のオプションの配列は、サブposを含んでいるか否かをブールすることができますか?

特定の選択が行われたかどうかに基づいて回答するために追加の質問をユーザーに提示できますが、さまざまな文字列をカバーするif/thenステートメントを記述したくありません。

答えて

0

部分文字列を含んでArray.prototypeはあなたの目的のために非常に便利な.filter機能を持っています。その後、

const arr = ['positive', 'positron', 'negative', 'negatron']; 
 

 
function findMatches() { 
 
    let searchVal = document.getElementById('test').value; 
 
    let res = arr.filter(el => el.indexOf(searchVal) > -1); 
 
    document.getElementById('result').innerHTML = res.join(', '); 
 
}
<input type="text" id="test" /> 
 
<button type="button" onclick="findMatches()">Find</button> 
 
<br /> Array: ['positive', 'positron', 'negative', 'negatron']<br /> 
 
<span id="result"></span>

そして、あなたの拡張ロジックはフィルタのアレイに適用されます。

+0

とアレックスのバージョンとなるだろう。おかげで – user1837608

+0

あなたが気にしないならもう1つの質問。 array.filterを 'if'条件に組み込むにはどうすればいいですか?意味、{if(arr.filter(?? indexOf( 'substr'))> -1){// do logic} – user1837608

+0

OPに戻る。 * any * matchが必要な場合は、比較する単一の値を返す '.reduce'を使うことができます(' [] 'は可能です)。あなたは**すべて**をしたい場合は、私の答えの結果と答えを比較してください。 –

0

あなたは配列の要素かどうかを確認するためにindexOfを使用することができますが

var testData = ['positive', 'negative'] 
 

 
testData.forEach(function(item) { 
 
    if (item.indexOf('pos') !== -1) { 
 
    console.log('Hava data') 
 
    } 
 
})

+0

さて、しかしそれぞれの配列を介して最初の反復ので、各アレイ要素は 'indexOf'でテストされています。わかった。 'forEach'ステップなしで部分配列の配列を直接照会することは可能ですか? – user1837608

+0

@ user1837608一つだけの要素がある場合、その後を見て 'Array.prototype.find()'、そうでない場合、私はこれは私のロジックで動作 'Array.prototype.filter()' – Andreas