求助:多种将字符串值转为小写的方法均无法生效
问题解决:把对象中所有字符串值转为全小写
你当前的核心问题是字符串转换步骤没真正修改原对象的属性值。JavaScript里的字符串是不可变类型,value.toLowerCase()只会生成一个新的小写字符串,但你没把这个新值重新赋值回kitchen[key],所以原对象里的字符串根本没发生变化。
先看你代码里的问题片段:
for (let key in kitchen){ let value = kitchen[key] if (typeof value === 'string'){ value.toLowerCase() // 这里只生成了新字符串,没存回原对象 } }
修正后的代码
把转换后的字符串重新赋值给对象属性即可,顺便修正两处潜在逻辑问题:
function sortTheKitchen(kitchen) { delete kitchen.hoover; // 修复总货架数计算:避免0被||逻辑忽略 kitchen.totalShelves = (kitchen.shelvesInCupboards || 0) + (kitchen.shelvesNotInCupboards || 0); // 分开执行delete,避免逻辑短路导致第二个属性无法删除 delete kitchen.shelvesInCupboards; delete kitchen.shelvesNotInCupboards; // 遍历转换字符串并赋值回原对象 for (let key in kitchen){ let value = kitchen[key]; if (typeof value === 'string'){ kitchen[key] = value.toLowerCase(); // 关键:更新原对象属性 } } return kitchen; }
额外说明
- 原代码中
totalShelves的计算逻辑有漏洞:如果某一货架数是0,||会直接跳过这个值,改成(x || 0)能确保数值相加的正确性。 - 用
&&连接delete语句会有逻辑短路风险——如果第一个属性不存在,delete返回false,第二个属性就不会被删除,分开写更稳妥。
内容的提问来源于stack exchange,提问作者maximusmd
相关产品推荐
相关产品推荐

