React.js中数组对象属性名空格转下划线及函数失效原因排查
问题原因分析
你的函数失效核心问题出在正则表达式的匹配规则错误,导致目标空格无法被正确替换,具体细节如下:
- 你使用的正则
/\s\s+/g仅匹配两个及以上的连续空格,但你的需求是替换单个空格(比如PRODUCT NAME里的单个空格),这个正则根本不会命中单个空格,自然不会执行替换操作。 - 额外问题:你添加了
.toUpperCase(),如果原属性名需要保留大小写(比如原key是"Product Name"),转成大写后会变成全大写的PRODUCT_NAME,这可能不符合你的预期;如果只是想替换空格,建议去掉这个方法。
修复后的代码示例
如果只需要替换所有空格(单个或连续多个)为下划线,同时保留原属性名的大小写,修改正则即可:
const productList = () => { for (let i = 0; i < data.length; i++) { let obj = data[i]; Object.keys(obj).forEach((key) => { // 匹配所有单个或连续空格,替换为下划线 const replacedKey = key.trim().replace(/\s+/g, "_"); if (key !== replacedKey) { obj[replacedKey] = obj[key]; delete obj[key]; } }); } };
如果确实需要将属性名转为全大写,保留.toUpperCase()的同时,正则依然要改成/\s+/g:
const replacedKey = key.trim().toUpperCase().replace(/\s+/g, "_");
内容的提问来源于stack exchange,提问作者Bhawna Dey
相关产品推荐
相关产品推荐

