复制对象的属性而不必重复所有变量名称?

时间:2016-10-26 13:32:07

标签: javascript

我有一个对象,我想在不修改原始对象的情况下将其某些属性的名称从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);
}

1 个答案:

答案 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);