我有一个对象,我想在不修改原始对象的情况下将其某些属性的名称从mixedCase
更改为snake_case
,而无需重新编写所有变量名称两次。这个例子只包含两个变量,但在我的真实代码中有10个以上,重复它只是为了将两个mixedCase
变量放入snake_case
感到愚蠢:
function do_stuff(data) {
const { totalScore, position } = data;
const params = { total_score: totalScore, position };
return do_more_stuff(params);
}
答案 0 :(得分:2)
您可以使用以下功能:
function snakeCase(s) {
return s.replace(/([A-Z])/g, c => '_' + c.toLowerCase());
}
function snakeCaseKeys(obj) {
return Object.keys(obj).reduce( (acc, key) =>
Object.assign(acc, { [snakeCase(key)]: obj[key] }), {} );
}
// Sample use:
const params = snakeCaseKeys({totalScore: 1, position: 2});
console.log(params);