2013-02-04 71 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」的對象。