2013-10-15 58 views
0

在CouchDB中,我有一個數組字段:如何從CouchDb獲取唯一值?

numbers:["79998887766","79998887755","79998887766","79998887744"] 

在node.js的軟件,我想擁有這隻獨特numbers.Like:

["79998887766","79998887755","79998887744"] 

它可以做到使用CouchDB視圖或節點。 js模塊cradle
還是唯一的辦法獲得所有的數字和過濾器數組與節點?

回答

1

它非常簡單,如果不夠優雅,則需要在整個數組上進行兩次迭代測試。因爲這是O(n²),所以它不能很好地適應大數組;我會找一個更復雜的解決方案,如果你希望你的號碼數組包含數百個或多個項目

function testExists(item, arr2){ 
    var exists = false; 
    arr2.forEach(function(item2){ 
    if(item === item2){ 
     exists = true; 
    } 
    }); 
    return exists; 
}; 

function removeDupes(arr){ 
    var output = []; 
    arr.forEach(function(item){ 
    var exists = testExists(item, output); 
    if(!exists){ 
     output.push(item); 
    }; 
    }); 
    return output; 
}; 

console.log(removeDupes(["a","b","a","c"])); 
1

您可以在獲取數據後在CouchDB視圖或node.js代碼中執行操作。在這兩種情況下,您都需要編寫JavaScript代碼以排除重複項。你可以使用這個對象:

var obj = {}; 

numbers.forEach(function (num) { 
    obj[num] = true; 
}); 

var unique = Object.keys(obj); 

它的作品,如果鍵的順序無關緊要。在視圖中執行此操作是更好的方法,因爲計算結果將被重用。

+0

我找不到權威的參考文獻,但我的印象是,您不能(或不應該)使用領先的數字作爲javascript標識符,請參閱。 http://coderkeen.com/old/articles/identifiers-en.html – Plato

+0

這裏是http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf,第18頁,但這些規則不適用於方括號表示法。 – vkurchatkin