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"
},
]

数组中通常有很多条目,我需要有效地过滤数组以仅显示具有“ccccccc”上下文的条目。我尝试了一个 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 回答
2

Khurrum 所说的另一种方法是使用箭头功能。它具有相同的结果,但有些人更喜欢这种表示法。

var output = arr.filter(x => x.context == "ccccccc" );
于 2020-10-08T16:36:04.123 回答
0
  1. 正如马特所建议的,为什么不包括WHERE context = "ccccccc"在你的 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 回答