如何在JavaScript中合并ccAddresses与toAddresses数组并去重
合并对象数组地址并去重的实现方案
需求说明
需要将对象数组old中每个元素的ccAddresses和toAddresses数组合并,最终得到一个包含无重复地址的newAddresses数组,输出格式如下:
{ "newAddresses": ["john@gmail.com", "joshua@gmail.com", "jane@gmail.com", "james@gmail.com"] }
现有代码问题
当前代码仅提取了每个元素的ccAddresses,未处理toAddresses,也没有做合并去重,最终输出的是对象数组,不符合需求。
正确实现代码
const old = [ { "ccAddresses": ["john@gmail.com", "joshua@gmail.com"], }, { "ccAddresses": ["jane@gmail.com", "joshua@gmail.com"], "toAddresses": ["jane@gmail.com", "james@gmail.com"], } ]; // 提取所有ccAddresses和toAddresses,扁平化后去重 const allAddresses = old.flatMap(item => [ ...(item.ccAddresses || []), ...(item.toAddresses || []) ]); const uniqueAddresses = [...new Set(allAddresses)]; // 组装成要求的输出格式 const result = { newAddresses: uniqueAddresses }; console.log(result);
代码解释
- 用
flatMap遍历数组,将每个元素的ccAddresses和toAddresses(兼容字段不存在的情况,默认取空数组)展开合并为一维数组 - 借助
Set自动去重的特性,将合并后的数组转为集合再转回数组,得到无重复的地址列表 - 最后将去重后的数组包装成需求要求的对象格式
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

