3

Node を使用して SQL から一連の結果を取得しましたが、次のように返されます。

[
   {
   "event_id": 111111,
   "date_time": "2012-11-16T01:59:07.000Z",
   "agent_addr": "127.0.0.1",
   "priority": 6,
   "message": "aaaaaaaaa",
   "up_time": 9015040,
   "hostname": "bbbbbbb",
   "context": "ccccccc"
},
   {
   "event_id": 111112,
   "date_time": "2012-11-16T01:59:07.000Z",
   "agent_addr": "127.0.0.1",
   "priority": 6,
   "message": "aaaaaaaaa",
   "up_time": 9015040,
   "hostname": "bbbbbbb",
   "context": "ddddddd"
},
]

通常、配列には多くのエントリがあり、配列を効率的にフィルタリングして、"cccccccc" のコンテキストを持つエントリのみを表示する必要があります。for ループを試してみましたが、信じられないほど遅いです。

何か提案はありますか?

4

3 に答える 3

9

ノードでそれを行いたいがSQLを使用したくない場合は、javascript組み込みArray.filter関数を使用できる非常に簡単な方法があります。

var output = arr.filter(function(x){return x.context=="ccccccc"}); //arr here is you result array

出力配列には、コンテキスト「ccccccc」を持つオブジェクトのみが含まれます。

于 2013-02-05T10:47:28.650 に答える
0
  1. Matt が提案したようにWHERE context = "ccccccc"、yout SQL クエリに含めてみませんか?

  2. それ以外の場合は、すべてを保持する必要がある場合は、次のいずれかを使用して結果をフィルタリングします

    // Place all "ccccccc" context row in an array
    
    var ccccccc = [];
    
    for (var i = results.length - 1; i >= 0; i--) {
      if(results[i] == 'ccccccc')
        ccccccc.push(results[i]);
    };
    
    // Place any context in an named array within an object
    
    var contexts = {};
    for (var i = results.length - 1; i >= 0; i--) {
    
      if(contexts[results[i]] == 'undefined')
        contexts[results[i]]
    
        contexts[results[i]].push(results[i]);
    };
    

    または、アンダースコア(または同様の)フィルター関数を使用します。

于 2013-02-04T10:48:19.757 に答える