我有一个地图功能,可以从电子邮件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>之前的同名。任何想法如何删除大写字母重复。或任何相关的例子也很好。
答案 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