web-dev-qa-db-ja.com

文字列の配列内で文字列を検索する方法

他の投稿で答えを探した後、私はこれを尋ねなければならないと感じました。 配列にJavaScriptのオブジェクトが含まれているかどうかを確認するにはどうすればよいですか? および アイテムがJavaScript配列内にあるかどうかを確認する最良の方法? を取得できませんでしたそこにコードが動作します。

配列にhtml埋め込みコードをキャプチャしているため、各アイテムはhtmlコードの行です。

例えば:

i[0]='<param name=\"bgcolor\" value=\"#FFFFFF\" />'
i[1]='<param name=\"width" value=\"640\" />'
i[2]='<param name=\"height\" value=\"360\" />'   
i[3]='more html code' 

この配列を検索して、Wordの「高さ」がある行を見つけたいと思います。

理想的には、「高さ」が表示されるアイテムのインデックスを返す関数を作成したいと思います。

幸い、この配列には重複がないため、発生は1つだけです。

単純なオブジェクト検索では、「false」が返されます。

何か案が?

43
someuser

配列を繰り返して正規表現を探すのと同じくらい簡単です

function searchStringInArray (str, strArray) {
    for (var j=0; j<strArray.length; j++) {
        if (strArray[j].match(str)) return j;
    }
    return -1;
}

編集-関数の引数としてstrを作成します。

51
Aleadam

リンクした包含関数の拡張:

containsRegex(a, regex){
  for(var i = 0; i < a.length; i++) {
    if(a[i].search(regex) > -1){
      return i;
    }
  }
  return -1;
}

次に、高さを探すために、文字列の配列と正規表現を使用して関数を呼び出します。

containsRegex([ '<param name=\"bgcolor\" value=\"#FFFFFF\" />', 'sdafkdf' ], /height/)

さらに、高さが見つかったインデックスを返すこともできます。

containsRegex(a, regex){
  for(var i = 0; i < a.length; i++) {
    int pos = a[i].search(regex);
    if(pos > -1){
      return [i, pos];
    }
  }
  return null;
}
11
Janick Bernet

JavascriptでArray.prototype.find関数を使用できます。 配列検索MDN

したがって、文字列の配列で文字列を見つけるには、コードは非常に単純になります。さらに、ブラウザの実装として、優れたパフォーマンスを提供します。

例.

var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find(
    function(str) {
        return str == value;
    }
);

またはラムダ式を使用すると、はるかに短くなります

var strs = ['abc', 'def', 'ghi', 'jkl', 'mno'];
var value = 'abc';
strs.find((str) => str === value);
9

文字列値の配列内で最初の部分文字列の一致を見つけようとしている場合は、 正規表現の使用を避ける の方が高速です。独自の配列検索機能を追加できます。

コード

Array.prototype.findFirstSubstring = function(s) {
            for(var i = 0; i < this.length;i++)
            {
                if(this[i].indexOf(s) !== -1)
                    return i;
            }
            return -1;
        };

使用法

i.findFirstSubstring('height');

戻り値

見つからない場合は-1、見つかった場合は最初の部分文字列の配列インデックス(あなたの場合は2

5
Alex W