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.
Install Deep Map Keys via npm.
npm install --save deep-map-keys
Suppose we want to change the keys of an object from snake case to camel case. We can do something like this:
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:
{
commentId: 42,
userId: 1024,
userName: 'Mufasa',
content: 'You deliberately disobeyed me.',
viewedBy: [
{ userId: 3820, userName: 'Rafiki' },
{ userId: 8391, userName: 'Zazu' }
]
}
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 it
contains 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:
|
[options] | object |
An optional options object. The following option is accepted:
|
Returns a new object.
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.
interface Result {
userName: string;
}
let result = deepMapKeys<Result>({user_name: 'Pumbaa'}, snakeToCamel);
let name = result.userName; // Everything is OK :)
Copyright © 2016–2019 Akim McMath. Licensed under the MIT License.