在couchdb中,我有一个数组字段:
numbers:["79998887766","79998887755","79998887766","79998887744"]
在 node.js 应用程序中,我只想拥有唯一的数字。喜欢这个:
["79998887766","79998887755","79998887744"]
可以使用 couchdb 视图或节点.js模块cradle
?
还是只有方法获取所有数字并使用节点过滤数组?
如果不优雅,在数组中迭代两次以测试重复项是相当简单的。 由于这是 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"]));
我相信在CouchDB中没有用于实现这一点的本机命令。该问题的一个可能的解决方案是使用类似 redis 集的东西。还有一些第三方库在Javascript中实现像这样的集合 https://github.com/PeterScott/simplesets-nodejs:
您可以在获取数据后在 CouchDB 视图或 node.js 代码中执行。在这两种情况下,您都需要编写javascript代码来排除重复项。您可以使用以下对象:
var obj = {};
numbers.forEach(function (num) {
obj[num] = true;
});
var unique = Object.keys(obj);
如果键的顺序无关紧要,它就可以工作。在视图中执行此操作是一种更好的方法,因为计算结果将被重用。