function encodeObjectValues(data) { const encodedObj = {} Object.keys(data).forEach((item) => { if (data.prototype.hasOwnProperty(item)) { const value = data[item] if (typeof value === 'string') { encodedObj[item] = value.replace(/\[/g, '%5B').replace(/\]/g, '%5D') } else { encodedObj[item] = value } } }) return encodedObj }
时间: 2024-04-14 19:26:40 浏览: 155
fast-keys:Object.keys()的高性能替代品
在你提供的代码中,有几个问题需要修正:
1. 在判断属性是否存在时,应该使用 `data.hasOwnProperty(item)` 而不是 `data.prototype.hasOwnProperty(item)`。因为 `data` 是一个普通对象,而不是一个构造函数或类的实例。
2. 如果属性存在,应该直接访问 `data[item]`,而不是 `const value = data[item]`。这样可以避免不必要的变量声明。
3. 对于字符串类型的值,你可以使用正则表达式 `/[\[\]]/g` 替换 `[` 和 `]` 字符,而不是使用两个独立的替换操作。
下面是修正后的代码:
```javascript
function encodeObjectValues(data) {
const encodedObj = {};
Object.keys(data).forEach((item) => {
if (data.hasOwnProperty(item)) {
const value = data[item];
if (typeof value === 'string') {
encodedObj[item] = value.replace(/[\[\]]/g, (match) => {
if (match === '[') return '%5B';
if (match === ']') return '%5D';
});
} else {
encodedObj[item] = value;
}
}
});
return encodedObj;
}
```
修正后的代码将正确地编码对象的值,并返回一个新的编码后的对象。
阅读全文