JavaScript:如何将逗号分隔的邮箱字符串转换为含指定键值对对象的数组?
如何将逗号分隔的邮箱字符串转换为指定的键值对数组
我明白你想要把逗号分隔的邮箱列表转成[{"to": "邮箱地址"}, ...]这种数组结构,之前的两种尝试方向都有点偏,咱们来一步步修正:
先拆解下你之前的问题:
- 第一种用
Object.assign把数组转成对象,得到的是数字索引为键的对象——这是因为数组本身就是带索引的特殊对象,这个方法根本没法生成你要的数组结构。 - 第二种用
reduce的写法搞反了键值关系,而且最后得到的是一个对象,不是数组,自然不符合预期。
正确的实现方法
其实最适合这个场景的是数组的map方法——它可以遍历数组里的每一项,把每一项转换成你想要的格式,最终返回一个新数组,完全匹配你的需求:
var req = { query: { personalize: "email@mail.com,mike@example.com,john@gmail.com" } }; var emailList = req.query.personalize; // 第一步:把逗号分隔的字符串拆成邮箱数组 var emailArr = emailList.split(","); // 第二步:用map遍历每个邮箱,生成指定格式的对象 var result = emailArr.map(email => ({ to: email })); console.log(result);
执行这段代码后,你就能得到期望的结果:
[{"to": "email@mail.com"}, {"to": "mike@example.com"}, {"to": "john@gmail.com"}]
简单解释下原理
map方法会迭代数组中的每一个元素,对每个元素执行你传入的回调函数。这里我们对每个邮箱地址,返回一个{to: email}的对象,所有这些对象会被自动收集成一个新数组,正好就是你需要的结构。
内容的提问来源于stack exchange,提问作者Clark Weckmann
相关产品推荐
相关产品推荐

