如何在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
相关产品推荐
相关产品推荐

