我正试图得到这个:
const obj = {
keyFirst: 'firstVal',
keySecond: 'secondVal',
};
从这里:
const obj = {
key_first: 'firstVal',
key_second: 'secondVal',
};
...因此将下划线键格式更改为camelCase格式。
我试图通过使用reduce函数来实现它:
const renameKeys = obj => Object
.keys(obj)
.reduce((acc, key) => {
const modifiedKey = key.replace(/_([a-z])/g, function f(g) {
return g[1].toUpperCase();
});
return ({
...acc,
...{ [modifiedKey]: obj[key] },
}, {});
});
console.log(renameKeys(obj));
但是这将无法工作并返回空对象。如何更改它以实现我的目标?
答案 0 :(得分:2)
问题是
return ({
...acc,
...{ [modifiedKey]: obj[key] },
}, {});
您无意中使用了逗号运算符-尽管对新对象进行了评估,但括号内的整个表达式的取值为逗号分隔列表中的最终值,这是一个空对象,它将在下一次迭代时成为累加器。
请勿在{{1}}中使用逗号运算符,而应将return
作为第二个参数传递给{}
:
reduce
此外,您可能会考虑使用 const obj = {
key_first: 'firstVal',
key_second: 'secondVal',
};
const renameKeys = obj => Object
.keys(obj)
.reduce((acc, key) => {
const modifiedKey = key.replace(/_([a-z])/g, function f(g) {
return g[1].toUpperCase();
});
return ({
...acc,
...{ [modifiedKey]: obj[key] },
});
}, {});
console.log(renameKeys(obj));
,而不是使用Object.keys
,因为Object.entries
可能比[modifiedKey]: value
更清晰:
[modifiedKey]: obj[key]
答案 1 :(得分:0)
您可以按组划分密钥名称,并使用$1
和$2
代表组
const obj = {
keyFirst: 'firstVal',
keySecond: 'secondVal',
};
let newObj = {}
for (let keys in obj) {
newObj[keys.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase()] = obj[keys]
}
console.log(newObj)