JavaScript:将对象数组中的邮箱键名替换为@前前缀
解决方案:批量修改对象键名,移除邮箱后缀
你可以通过遍历数组中的每个对象,重新构建键值对的方式完成需求,以下是可行的代码:
const data = [ { "date": "17/03/2022", "count": 2, "james@email.net": 2 }, { "date": "17/05/2022", "count": 2, "admin@email.com": 1, "secretary@email.uk": 1 }, { "date": "17/07/2022", "count": 7, "staff@email.us": 7 }, ]; // 转换数据 const transformedData = data.map(item => { return Object.entries(item).reduce((newObj, [key, value]) => { // 处理键名:含@则截取前缀,否则保留原键 const processedKey = key.includes('@') ? key.split('@')[0] : key; newObj[processedKey] = value; return newObj; }, {}); }); console.log(transformedData);
代码逻辑说明
- 用
map遍历原数组,为每个对象生成转换后的新对象,避免直接修改原数据(如需修改原数据,可直接赋值回data) Object.entries(item)将对象转为[键, 值]格式的数组,方便遍历处理每个键值对reduce负责构建新对象:对每个键判断是否包含@,若是则截取@之前的字符串作为新键名,否则保留原键,最后将键值对存入新对象
你原代码的问题
- 变量名冲突:内层循环使用了和外层循环相同的变量
i,导致外层循环的i被覆盖,逻辑会出现异常 - 未实际修改数据:你只提取了邮箱前缀,但没有将原对象的键替换,也没有生成新对象来保存转换后的结果,所以没有达到修改键名的效果
内容的提问来源于stack exchange,提问作者marc
相关产品推荐
相关产品推荐

