Socket
Socket
Sign inDemoInstall

deep-map-keys

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

deep-map-keys

Transforms nested keys of complex objects


Version published
Weekly downloads
8.6K
increased by7.97%
Maintainers
1
Weekly downloads
 
Created
Source

Deep Map Keys

Version License Build Coverage

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

Install Deep Map Keys via npm.

npm install --save deep-map-keys

Usage

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' }
  ]
}

API

deepMapKeys(object, mapFn, [options])
Parameters
ParamTypeDescription
objectany 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.
mapFnfunction The function used to transform each key. The function is called with two arguments:
  • key <string> The key being transformed
  • value <any> The value of the node whose key is being transformed
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:
  • thisArg <any=undefined> Sets the value of this within mapFn()
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.

interface Result {
  userName: string;
}

let result = deepMapKeys<Result>({user_name: 'Pumbaa'}, snakeToCamel);

let name = result.userName; // Everything is OK :)

License

Copyright © 2016–2019 Akim McMath. Licensed under the MIT License.

Keywords

FAQs

Package last updated on 29 Jan 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc