2013-02-04 73 views
1

我已经使用节点从SQL中检索一组结果,它们就像这样返回;NodeJS JSON数组过滤

[ 
    { 
    "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

为什么你不能限制你的查询只返回'cccccccc'上下文? – Matt

回答

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]); 
    }; 
    

    或使用underscore(或类似)filter功能。

+1

有原生的V8'Array.filter'(我相信下划线会使用它)。 – elmigranto

4

有这样做的一个非常简单的方法,如果你想要做的是,在节点不想使用SQL为您也可以javascript内置Array.filter功能的用户。

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

输出数组将仅包含具有上下文“ccccccc”的对象。