You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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负责构建新对象:对每个键判断是否包含@,若是则截取@之前的字符串作为新键名,否则保留原键,最后将键值对存入新对象

你原代码的问题

  1. 变量名冲突:内层循环使用了和外层循环相同的变量i,导致外层循环的i被覆盖,逻辑会出现异常
  2. 未实际修改数据:你只提取了邮箱前缀,但没有将原对象的键替换,也没有生成新对象来保存转换后的结果,所以没有达到修改键名的效果

内容的提问来源于stack exchange,提问作者marc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:20:26