2017-06-09 24 views
0

私はちょうど私が立ち往生した私の問題の基本的なユースケースを作成しました。クライアントからのsearchStrキーワード配列オブジェクトを持っています。すべての検索キーワードがresultsにプッシュラインだけで一致するかどうかを調べます。以下のコードでは、常にresultsの空の配列を返します。この問題を解決するにはどうすればいいですか?すべてのキーワードが一致する場合、値を配列にプッシュする方法はありますか?

search.js

var line = "ticketNumber:45287,Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer " 

var searchStr = [{ 
    "text": "45287" 
}, { 
    "text": "standard" 
}] 

var results = []; 

function matchSearchStr(line, searchStrArray) { 
    for (var i = 0; i < searchStrArray.length; i++) { 
     if (line.toLowerCase().indexOf(searchStrArray[i].toLowerCase()) != -1) { 
      results.push({ 
       filename: "file", 
       value: line 
      }); 
      console.log(results); 
     } 

    } 

} 

matchSearchStr(line, searchStr) 
+0

「searchStr = ["45287"、 "standard"] 'を書かない理由はありますか? –

+0

キーワードを入力するときに配列オブジェクトを作成する角度の 'ngInputTags'を使用しています – hussain

+0

無関係ですが、グローバルを使用する代わりに検索関数内に' results'を作成して返します。 –

答えて

0

あなたがあなたのsearchStrArrayでTEXTに検索されていません。この試してみてください。ここに@aorfevre返信OF

function matchSearchStr(line, searchStrArray) { 
    for (var i = 0; i < searchStrArray.length; i++) { 

     if (line.toLowerCase().indexOf(searchStrArray[i].text.toLowerCase()) != -1) { 
      results.push({ 
       filename: "file", 
       value: line 
      }); 
      console.log(results); 
     } 

    } 

} 

---- OWNERのEDIT

、私は今、私はそれがすべて送信し、この場合には、配列の文字列にオブジェクト配列をchnagedている実装しようとしている実際のコードです結果。

async.eachSeries(filesData.logFiles, function (logfile,done) { 
      // read file 
      readStream = fs.createReadStream('./logs/' + filesData.searchEnv + '/'+ logfile.filename,'utf8') 
      readStream.pipe(split()) 
       .on('data', function (line) { 

       console.log(searchStr); 
       for(var i=0; i<searchStr.length; i++) { 
       if (line.toLowerCase().indexOf(searchStr[i].toLowerCase()) != -1) 
      var messageDateInfo = line.split('|')[0].replace(/[\[\]']+/g,''); 
       messageDateInfo = new Date(messageDateInfo).getTime(); 
       searchStartDate = new Date(searchStartDate).getTime(); 
       searchEndDate = new Date(searchEndDate).getTime(); 
       if(messageDateInfo - searchStartDate > 0 && searchEndDate - messageDateInfo > 0){ 
        // console.log("message date is within this time range"); 
        results.push({ 
        filename:logfile.filename, 
        value:line 
        }); 
       } 
      } 
      }); 
        done(); 
     } 
     , function (err) { 
      if (err) { 
       console.log('error', err); 
      } 
      readStream.on('end',function(){ 
      callback(results); 
      }); 
      results = []; 
     }); 
     } 

    } 
+0

'text'を追加するとこのエラーが発生します。TypeError:未定義の 'toLowerCase'プロパティを読み取れません – hussain

+0

@hussainそれから、私はそうではないので、何か間違っています。 –

+0

@DaveNewtonもっとよく理解するためにこの回答にコードを追加しました – hussain

関連する問題