Transforms nested keys of complex objects
npm install deep-map-keys[![Version][version-badge]][npm]
[![License][license-badge]][license]
[![Build][build-badge]][travis]
[![Coverage][coverage-badge]][coveralls]
Install | Usage | API | TypeScript | License
Deep Map Keys recurses through an object and transforms its keys – and
the keys of any nested objects – according to some function. Circular
references are supported.
To transform the values of an object rather than its keys, use
[Deep Map][deep-map].
Install Deep Map Keys via [npm][npm].
``sh`
npm install --save deep-map-keys
Suppose we want to change the keys of an object from [snake case][snake-case] to
[camel case][camel-case]. We can do something like this:
`js
const deepMapKeys = require('deep-map-keys');
let comment = {
comment_id: 42,
user_id: 1024,
user_name: 'Mufasa',
content: 'You deliberately disobeyed me.',
viewed_by: [
{ user_id: 3820, user_name: 'Rafiki' },
{ user_id: 8391, user_name: 'Zazu' }
]
};
function snakeToCamel(key) {
return key.replace(/_(\w)/g, (match, char) => char.toUpperCase());
}
let result = deepMapKeys(comment, snakeToCamel);
`
And the result will look like this:
`js`
{
commentId: 42,
userId: 1024,
userName: 'Mufasa',
content: 'You deliberately disobeyed me.',
viewedBy: [
{ userId: 3820, userName: 'Rafiki' },
{ userId: 8391, userName: 'Zazu' }
]
}
#### deepMapKeys(object, mapFn, [options])
#### Parameters
| Param | Type | Description |
|---|---|---|
| object | any | The object whose keys are to be transformed. Typically, this will be a complex object containing other nested objects. This object may be an Array, in which case the keys of any objects itcontains will be transformed. The object may contain circular references. |
| mapFn | function | The function used to transform each key. The function is called with two arguments:
The return value determines the new name of the key, and must therefore be a string. |
| [options] | object | An optional options object. The following option is accepted:
|
#### Returns
Returns a new object.
[TypeScript][typescript] declarations are included in the package. Just import
the module, and things will just work.
The shape of the returned object cannot be inferred from the inputs; however it
can be defined by passing a single type argument.
`ts
interface Result {
userName: string;
}
let result = deepMapKeys
let name = result.userName; // Everything is OK :)
``
Copyright © 2016–2019 Akim McMath. Licensed under the [MIT License][license].
[version-badge]: https://img.shields.io/npm/v/deep-map-keys.svg?style=flat-square
[license-badge]: https://img.shields.io/npm/l/deep-map-keys.svg?style=flat-square
[build-badge]: https://img.shields.io/travis/mcmath/deep-map-keys/master.svg?style=flat-square
[coverage-badge]: https://img.shields.io/coveralls/mcmath/deep-map-keys/master.svg?style=flat-square&service=github
[npm]: https://www.npmjs.com/package/deep-map-keys
[license]: LICENSE
[travis]: https://travis-ci.org/mcmath/deep-map-keys
[coveralls]: https://coveralls.io/github/mcmath/deep-map-keys?branch=master
[deep-map]: https://github.com/mcmath/deep-map
[snake-case]: https://en.wikipedia.org/wiki/Snake_case
[camel-case]: https://en.wikipedia.org/wiki/CamelCase
[typescript]: http://www.typescriptlang.org/