gpt4 book ai didi

javascript - 删除重复项并合并 Javascript 数组的值

转载 作者:行者123 更新时间:2023-11-30 07:55:04 24 4
gpt4 key购买 nike

我有一个像这样的 javascript 数组:

var recipients = [{
name: 'Michael',
task: 'programming',
contactdetails: 'michael@michael.com'
}, {
name: 'Michael',
task: 'designing',
contactdetails: 'michael@michael.com'
}, {
name: 'Shane',
task: 'designing',
contactdetails: 'shane@shane.com'
}];

我正在做的是一个名册系统,我会在其中发送本周谁在场的通知,所以电子邮件就像“嗨,迈克尔,你这周正在编程”。目前它不是很好,因为它会为数组中的每个值发送一封电子邮件。所以在上面的例子中,它会向 Michael 发送 2 封电子邮件。

我想做的是在合并任务属性字符串时删除重复项。所以数组将是:

var recipients = [{
name: 'Michael',
task: 'programming, designing',
contactdetails: 'michael@michael.com'
}, {
name: 'Shane',
task: 'designing',
contactdetails: 'shane@shane.com'
}];

这样它就可以发送一条消息,例如“嗨,迈克尔,你正在编程,这周正在设计”。我该怎么做?我也在使用 Google Apps 脚本,所以我需要一个纯 JavaScript 解决方案。我还应该补充一点,每个人的姓名和电子邮件地址将始终相同,因此 Michael 永远不会有不同的电子邮件地址等。非常感谢您的帮助!

最佳答案

这将是使用 reduce 的好机会功能。

我们所做的是循环遍历每个原始收件人列表,看我们是否已经处理过该元素,如果是,则将当前元素的任务附加到已处理的元素中,否则,将当前收件人添加到处理列表

// original array
var recipients = [
{name: 'Michael',task:'programming',contactdetails:'michael@michael.com'},
{name: 'Michael',task:'designing',contactdetails:'michael@michael.com'},
{name: 'Shane',task:'designing',contactdetails:'shane@shane.com'}
];
var recipientKeyList = []; // used to store the contacts we've already processed
// cycle through each recipient element
var newRecipients = recipients.reduce(function(allRecipients, recipient){
// get the indexOf our processed array for the current recipient
var index = recipientKeyList.indexOf(recipient.contactdetails);
// if the contact details already exist, append the task
if( index >= 0){
allRecipients[index].task = allRecipients[index].task + ', ' + recipient.task;
return allRecipients
}else{ // otherwise append the recipient
recipientKeyList.push(recipient.contactdetails)
return allRecipients.concat(recipient);
}

}, []);

关于javascript - 删除重复项并合并 Javascript 数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42241815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com