MapReduce删除重复的字符串

时间:2017-05-05 18:52:18

标签: javascript node.js mapreduce

我有一个地图功能,可以从电子邮件ID&发出一个以减少不计算域的函数。

// method syntax
var result  = data.GroupBy(key => key.Line3, item => item.Line2)
                  .Select(g => new
                  {
                      g.Key,
                      Line2 = g.ToList()
                  }).ToList();

// query syntax
var result = from item in data
             group item.Line2 by item.Line3 into g
             select new
             {
                 g.Key,
                 Line2 = g.ToList()
             };

这是函数

[
    { email:"xyz@gmail.com"},
    { email:"abc@abc.com"},
    { email:"inder@hotmail.com"},
    { email:"Ravi@Hotmail.com"},
    { email:"xxx@GMail.com"},
]

输出很好: -

db.collection.mapReduce(
    function() {
        emit(this.email.substr(this.email.indexOf('@') + 1), 1);  
    }, 
    function(host, count) { 
        return Array.sum(count) ; }, 
    { out: "hosts" } 
)

但我想要的是

   gmail.com
   abc.com
   hotmail.com
   Hotmail.com
   GMail.com

我不希望域名中包含大写字母的重复项。 < .com>之前的同名。任何想法如何删除大写字母重复。或任何相关的例子也很好。

3 个答案:

答案 0 :(得分:2)

使用ES5,您可以执行以下操作:

var arr, res = [];

arr = [
  {email: "xyz@gmail.com"},
  {email: "abc@abc.com"},
  {email: "inder@hotmail.com"},
  {email: "Ravi@Hotmail.com"},
  {email: "xxx@GMail.com"}
];

arr.map(function (item) {
  return item.email.substr(item.email.indexOf('@') + 1).toLowerCase();
}).forEach(function (item) {
  if (res.indexOf(item) === -1) {
    res.push(item);
  }
});

console.log(res);

答案 1 :(得分:1)

使用Set获取唯一值的单行:

const arr = [
  { email:"xyz@gmail.com"},
  { email:"abc@abc.com"},
  { email:"inder@hotmail.com"},
  { email:"Ravi@Hotmail.com"},
  { email:"xxx@GMail.com"},
];

const r = [...new Set(arr.map(({email}) => email.toLowerCase().substr(email.indexOf('@') + 1)))]

console.log(r)

此代码使用desturcturing语法获取数组内每个对象的email属性,然后将其设为小写并切换域名,并使用Set构造函数使结果数组唯一,并对此Set进行解构再次进入阵列。

答案 2 :(得分:0)

在emit函数中,您可以这样做,以便返回域的小写,如下所示:myOpenCLApi(void* ptr); Info here

从所有this.email.substr(this.email.indexOf('@') + 1).toLowerCase() GMail.com gmail.com等方式开始,您只会获得GMAIL.COM