https://github.com/watson/flatten-obj
Converts an object literal with deeply nested nodes to a simple key/value object
https://github.com/watson/flatten-obj
Last synced: 12 months ago
JSON representation
Converts an object literal with deeply nested nodes to a simple key/value object
- Host: GitHub
- URL: https://github.com/watson/flatten-obj
- Owner: watson
- License: mit
- Created: 2014-12-29T15:09:11.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2017-07-27T07:33:47.000Z (over 8 years ago)
- Last Synced: 2025-04-13T12:49:10.118Z (about 1 year ago)
- Language: JavaScript
- Size: 23.4 KB
- Stars: 21
- Watchers: 2
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-micro-npm-packages-zh - flatten-obj - 将具有深嵌套节点的对象文字,转换为简单的键/值对象. (模块 / 对象)
- awesome-micro-npm-packages - flatten-obj - Converts an object literal with deeply nested nodes to a simple key/value object. (Modules / Object)
- fucking-awesome-micro-npm-packages - flatten-obj - Converts an object literal with deeply nested nodes to a simple key/value object. (Modules / Object)
- awesome-micro-npm-packages - flatten-obj - Converts an object literal with deeply nested nodes to a simple key/value object. (Modules / Object)
README
# flatten-obj
Converts an object literal with deeply nested nodes to a simple
key/value object. In other words converts this:
```js
{
foo: 1,
bar: {
sub1: 2,
sub2: {
sub3: 3
}
}
}
```
To this:
```js
{
foo: 1,
'bar.sub1': 2,
'bar.sub2.sub3': 3
}
```
[](https://travis-ci.org/watson/flatten-obj)
[](https://github.com/feross/standard)
## Installation
```
npm install flatten-obj
```
## Usage
```js
var flatten = require('flatten-obj')()
var obj = {
foo: {
bar: 1
}
}
// outputs `{ 'foo.bar': 1 }`
console.log(flatten(obj))
```
### Blacklist
Some objects migth seem like object literals, but shouldn't be
flattened. To avoid this, you can supply a list of classes that
shouldn't be flattened when the object is traversed:
```js
var Klass = function () {
this.baz = 1
}
var flatten = require('flatten-obj')({ blacklist: [Klass] })
var obj = {
foo: {
bar: new Klass()
}
}
// outputs `{ 'foo.bar': { baz: 1 } }`
console.log(flatten(obj))
```
### Custom separator
You can use a custom separator character to join keys:
```js
var flatten = require('flatten-obj')({ separator: '/' })
var obj = {
foo: {
bar: 42
}
}
// outputs `{ 'foo/bar': 42 }`
console.log(flatten(obj))
```
### Leaves
Only return the leaf nodes
```js
var flatten = require('flatten-obj')({ onlyLeaves: true })
var obj = {
sub: {
foo: 1,
bar: {
baz: 2
}
}
}
// outputs `{ foo: 1, baz: 2 }`
console.log(flatten(obj))
```
## Gotchas
### MongoDB data types
MongoDB data types like `ObjectId` or `Timestamp` looks like regular
object literals and should be handled with care. So you would normally
want to add those to the blacklist:
```js
var mongodb = require('mongodb')
var flatten = require('flatten-obj')({ blacklist: [
mongodb.ObjectID,
mongodb.DBRef,
mongodb.Timestamp,
mongodb.MinKey,
mongodb.MaxKey,
mongodb.Long
]})
```
### Arrays
This module currenly leaves arrays and their content in place. I.e. the
keys `foo` and `bar` in the following object isn't modified:
```js
{
foo: [1, 2, 3],
bar: [{ foo: 1 }, { bar: 2 }]
}
```
If you are familiar with MongoDB you know though that it's possible to
update single elements of an array using the dot-notation-syntax.
Open a pull request or tell me about your use case if you'd like the
above object to be converted to:
```js
{
foo: [1, 2, 3],
'bar.0.foo': 1,
'bar.1.bar': 2
}
```
## License
MIT