2017-06-22 8 views
-2

javascriptを使用して部分文字列の位置に関する情報を大きな文字列に返す関数が必要です。このようなものがネイティブに存在するかどうかは分かりませんので、私はここでチャンスを取っていきたいと思います。例えば文字列内の部分文字列のインデックスをすべて検索し、それぞれの制限をJavaScriptで返します

、次の入力文字列を持つ:

"dog elephant you me test another test what thesis"

をそして、私は次の配列がある場合:

array("Dog", "test", "not this one", "what the heck", "thesis")

に最も効率的な方法は何のindexOf入力文字列のこれらすべての要素の位置?関数は、このような情報を用いてオブジェクトを返す有する:

  • 「犬」 - 0~3
  • 「テスト」の - (testが始まる)からではない、この「
  • (それが終了する場合)に1」 - ヌル(ない文字列の)
  • "一体何" - ヌル(ない文字列の)
  • "論文" - (thesisが始まる)から(それが終わるところ)

誰にも分かりますか? Tyvm!

var str = "dog elephant you me test another test what thesis"; 
 

 
var words = ["dog", "test", "not this one", "what the heck", "thesis"]; 
 

 
var indices = words.map(function (word) { 
 
    var start = str.indexOf(word); 
 
    if (start === -1) { 
 
    return null; 
 
    } 
 
    return { word, start, end: start + word.length }; 
 
}); 
 

 
console.log(indices);

私はあなたが結果が見えるようにしたいものだけを推測することができます。これは大文字と小文字が区別されること

+1

ループ、 '.indexOf()'、および数学(_ "(終了するところ)" _ = 'index + length') – Andreas

+0

あなたが求めているものは100%ではありません。あなたは、文字列と文字列の配列をとって、配列内の各項目の文字列を検索し、それらのインデックスのオブジェクトまたはnullを返すjavascript関数が必要ですか?出力オブジェクトの形式はどのようにすべきですか?それは辞書ですか? 2つの配列? – toshiomagic

答えて

0

注意。私のソリューションは、オブジェクトの配列を返します。オブジェクトには、問題の単語を含むwordプロパティがあります。開始インデックスにはstartプロパティ、終了インデックスにはendプロパティがあります。単語が見つからなかった場合、オブジェクトはnullに置き換えられます。

+0

パーフェクト!私は同様のことを考えましたが、それが最も効率的であることを確認したかったのです。ありがとうございました:) – Fane

+0

ネイティブforループはもう少し効率的ですが、 'map'はより明確です。なぜ私にdownvoteを与えた人が理由を説明するのだろうかと思います。 – PeterMader

関連する問題