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

如何在JavaScript/jQuery中修改对象的键名?

嗨,我来帮你搞定修改对象键名的问题~

首先得明确一点:JavaScript里对象的键是没法直接“修改”的,只能通过新增新键并复制对应值,再删除旧键,或者直接构建一个全新对象的方式来实现。结合你想用正则简化键名的需求,我给你两种实用方案:

方案1:创建新对象(推荐,更安全)

这种方式不会改动原对象,避免遍历过程中因为对象结构变化导致的意外问题,逻辑也更清晰:

const obj1 = { 'patato la blaza' : { 'weight' : 5, 'height' : 90 }, 'apple ibiza' : { 'weight' : 3, 'height' : 84 } };
const simplifiedObj = {};

// 遍历原对象的所有键
for (const oldKey of Object.keys(obj1)) {
  // 用正则提取简化后的键名,这里匹配第一个空格前的所有内容(你可以按需调整)
  const newKey = oldKey.match(/^[^ ]+/)[0];
  // 把原键对应的值赋值给新键
  simplifiedObj[newKey] = obj1[oldKey];
}

console.log(simplifiedObj);
// 输出结果:{ patato: { weight: 5, height: 90 }, apple: { weight: 3, height: 84 } }

方案2:直接修改原对象

如果你一定要在原对象上操作,记得先把所有键存到数组里再遍历,不然遍历过程中删除旧键会打乱循环:

const obj1 = { 'patato la blaza' : { 'weight' : 5, 'height' : 90 }, 'apple ibiza' : { 'weight' : 3, 'height' : 84 } };

// 先把原对象的键存成数组,避免遍历中对象结构变化影响循环
const allKeys = Object.keys(obj1);

allKeys.forEach(oldKey => {
  const newKey = oldKey.match(/^[^ ]+/)[0];
  // 只有新键和旧键不同时才操作,避免不必要的重复
  if (newKey !== oldKey) {
    obj1[newKey] = obj1[oldKey];
    delete obj1[oldKey];
  }
});

console.log(obj1);
// 输出和方案1一样的结果

用jQuery的$.each实现

如果你习惯用jQuery的遍历方法,也可以这么写:

const obj1 = { 'patato la blaza' : { 'weight' : 5, 'height' : 90 }, 'apple ibiza' : { 'weight' : 3, 'height' : 84 } };
const allKeys = Object.keys(obj1);

$.each(allKeys, function(index, oldKey) {
  const newKey = oldKey.match(/^[^ ]+/)[0];
  if (newKey !== oldKey) {
    obj1[newKey] = obj1[oldKey];
    delete obj1[oldKey];
  }
});

正则小提示

我用的/^[^ ]+/是匹配到第一个空格为止的所有字符,如果你只需要提取第一个字母数字组成的单词,可以换成/^\w+/。要是你的键名有其他规则,随时调整正则就行~

另外要注意:如果多个旧键简化后是同一个新键(比如'apple pie'和'apple juice'都变成'apple'),后面的会覆盖前面的值,这种情况你可能需要额外处理(比如加个序号后缀)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:51:21