我想对我使用两个值office和reportName完成的对象数组进行分组,但我希望将电子邮件ID放在我收到的字符串中,但电子邮件ID不是唯一的。我必须尝试添加所有电子邮件但是当我尝试连接时它给出一个空字符串。谁能知道如何做到这一点
var data = [{
email: 'amar045@gmail.com',
office: 'xyz.in',
reportName: 'payroll',
},
{
email: 'amar0455@gmail.com',
office: 'xyz.in',
reportName: 'payroll',
},
{
email: 'amar0455@gmail.com',
office: 'xyz.in',
reportName: 'payroll',
},
{
email: 'amar045@gmail.com',
office: 'xyz.in',
reportName: 'payroll',
},
{
email: 'amar0445@gmail.com',
office: 'yyy.in',
reportName: 'delievered',
},
{
email: 'amar0445@gmail.com',
office: 'yyy.in',
reportName: 'delievered',
},
{
email: 'amar0425@gmail.com',
office: 'yyy.in',
reportName: 'payroll',
},
{
email: 'amar0425@gmail.com',
office: 'xyz.in',
reportName: 'delievered',
}
];
let hash = Object.create(null);
let grouped = [];
data.forEach(function(o) {
var key = ['office', 'reportName']
.map(function(k) {
return o[k];
})
.join('|');
if (!hash[key]) {
hash[key] = {
office: o.office,
reportName: o.reportName,
email: ''
};
grouped.push(hash[key]);
}
['email'].forEach(function(k) {
hash[key][k] += o[k].split(',');
});
});
console.log(grouped);
预期输出为
[
{
office: 'xyz.in',
reportName: 'payroll',
email: 'amar045@gmail.com, amar0455@gmail.com, amar0425@gmail.com'
},
{
office: 'yyy.in',
reportName: 'delievered',
email: 'amar0445@gmail.com, amar0425@gmail.com'
},
{
office: 'yyy.in',
reportName: 'payroll',
email: 'amar0425@gmail.com'
}
]
最佳答案
您可以使用 String 的“includes”方法来检查电子邮件是否已存在并更新对象的电子邮件属性。
var data = [
{
email: 'amar045@gmail.com',
office: 'xyz.in',
reportName: 'payroll',
},
{
email: 'amar0455@gmail.com',
office: 'xyz.in',
reportName: 'payroll',
},
{
email: 'amar0455@gmail.com',
office: 'xyz.in',
reportName: 'payroll',
},
{
email: 'amar045@gmail.com',
office: 'xyz.in',
reportName: 'payroll',
},
{
email: 'amar0445@gmail.com',
office: 'yyy.in',
reportName: 'delievered',
},
{
email: 'amar0445@gmail.com',
office: 'yyy.in',
reportName: 'delievered',
},
{
email: 'amar0425@gmail.com',
office: 'yyy.in',
reportName: 'payroll',
},
{
email: 'amar0425@gmail.com',
office: 'xyz.in',
reportName: 'delievered',
}
];
let hash = Object.create(null);
let grouped = [];
data.forEach(function(o) {
var key = ['office', 'reportName']
.map(function(k) {
return o[k];
})
.join('|');
if (!hash[key]) {
hash[key] = {office: o.office, reportName: o.reportName, email: ''};
grouped.push(hash[key]);
}
['email'].forEach(function(k) {
if (hash[key] && !hash[key][k].includes(o[k])){
hash[key][k] += o[k] + ',';
}
});
});
console.log(grouped);
关于javascript - 如何对具有多个值的对象数组进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59660090/