2012-02-29 11 views
1

は、私はより多くのエントリを持つJavaScript配列の正規表現ルックアップの値はどうすればよいですか?

[ {name:"value1", action:"U"}, {name:"text2", action:"d"} ] 

に似たオブジェクトの配列を持っていると言います。

私はこれで値を調べたいと思いますが、スヌーズを使って、リスト内の単語のいずれかが "value1を検索したい"という文字列に含まれているかどうかを確認し、そのインデックス番号を返します。どのように私はこれに近づくのだろうかこれが問題であれば、これはNode.JSで実行されます。

+1

ループデループがあります。 – epascarello

答えて

1

epascarelloが指摘しているように、単純にforループを実行するだけで、そのインデックスを取得する関数にラップアップするだけで、探しているものを行うことができます。

var a = [ {name:"value1", action:"U"}, {name:"text2", action:"d"} ]; 

function getIndex(query, arr) { 
    var reg = RegExp(query); 

    for (var i = 0, l = arr.length; i < l; i++) { 
     var item = arr[i]; 
     if (reg.test(item.name)) return i; 
    } 
    return false; 
} 

var index = getIndex('text', a); 

あなたがデータを操作する他の方法を探しているなら、あなたはunderscoreを見てみたいことがあります。

EDIT:あなたの最初の質問を少し間違って見て、@ pimvdbのエスケープ推奨に注意しました。これはおそらくあなたが望むものの多くです。

var a = [ {name:"value1", action:"U"}, {name:"text2", action:"d"} ]; 

function getIndex(query, arr) { 
    query = escape(query); 
    for (var i = 0, l = arr.length; i < l; i++) { 
     var item = arr[i], 
      reg = RegExp(escape(item.name)); 
     if (reg.test(query)) return i; 
    } 
    return false; 
} 

var index = getIndex('I want to look up value1', a); 
+0

''text''はうまく動作しますが、このメソッドで特殊な正規表現文字を二重にエスケープすることを忘れないでください。 – pimvdb

+0

私は今夜これを見ているべきです。私はそれが動作するかどうかをお知らせします。 –

関連する問題