使用 ramda js 重命名键

Joe*_*Joe 3 javascript ramda.js

const orignalArr = [
  {
    personName: 'Joe'
  }
]
Run Code Online (Sandbox Code Playgroud)

预期输出:

const convertedArr = [
  {
    name: 'Joe'
  }
]
Run Code Online (Sandbox Code Playgroud)

我认为重命名的键是在一个对象中定义的(但如果有更好的映射方法就可以了):

const keymaps = {
  personName: 'name'
};
Run Code Online (Sandbox Code Playgroud)

我怎样才能用 Ramda 做到这一点?

有东西 R.map

Sco*_*yet 9

一个条目Ramda的食谱此:

const renameKeys = R.curry((keysMap, obj) =>
  R.reduce((acc, key) => R.assoc(keysMap[key] || key, obj[key], acc), {}, R.keys(obj))
);

const originalArr = [{personName: 'Joe'}]

console .log (
  R.map (renameKeys ({personName: 'name'}), originalArr)
)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
Run Code Online (Sandbox Code Playgroud)

但是随着 ES6 的普及,直接写这个很容易:

const renameKeys = (keysMap) => (obj) => Object.entries(obj).reduce(
  (a, [k, v]) => k in keysMap ? {...a, [keysMap[k]]: v} : {...a, [k]: v},
  {}
)
Run Code Online (Sandbox Code Playgroud)