Skip to content
Advertisement

Rename keys with ramda js

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

expected output:

const convertedArr = [
  {
    name: 'Joe'
  }
]

I’m thinking the renamed keys are defined in an object (but fine if there’s a better way to map them):

const keymaps = {
  personName: 'name'
};

How can I do this with Ramda?

Something with R.map

Advertisement

Answer

There is an entry in Ramda’s Cookbook for this:

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)
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>

But with the ubiquity of ES6, it’s pretty easy to write this directly:

const renameKeys = (keysMap) => (obj) => Object.entries(obj).reduce(
  (a, [k, v]) => k in keysMap ? {...a, [keysMap[k]]: v} : {...a, [k]: v},
  {}
)
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement