0

在 couchdb 我有一个数组字段:

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

在 node.js 应用程序中,我只想拥有唯一的数字。像这样:

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

它可能与 couchdb 视图或 node.js 模块有关cradle吗?
还是只有用节点获取所有数字和过滤数组的方法?

4

3 回答 3

1

获取数据后,您可以在 CouchDB 视图或 node.js 代码中执行此操作。在这两种情况下,您都需要编写 javascript 代码来排除重复项。您可以使用以下对象:

var obj = {};

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

var unique = Object.keys(obj);

如果键的顺序无关紧要,它可以工作。在视图中这样做是更好的方法,因为计算的结果将被重用。

于 2013-10-15T17:00:15.283 回答
1

如果不优雅的话,在数组中迭代两次测试重复项是相当简单的。因为这是 O(n²) 它不能很好地扩展到大数组;如果您希望您的 numbers 数组包含数百或更多项目,我会寻找更复杂的解决方案

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"]));
于 2013-10-15T16:53:11.620 回答
1

我相信在 CouchDB 中没有用于实现此功能的本机命令。该问题的一个可能解决方案是使用类似redis sets的东西。还有一些第三方库在 Javascript 中实现集合,例如:https ://github.com/PeterScott/simplesets-nodejs 。

于 2013-10-15T16:54:42.823 回答