Giter Club home page Giter Club logo

flatten-obj's Introduction

flatten-obj

Converts an object literal with deeply nested nodes to a simple key/value object. In other words converts this:

{
  foo: 1,
  bar: {
    sub1: 2,
    sub2: {
      sub3: 3
    }
  }
}

To this:

{
  foo: 1,
  'bar.sub1': 2,
  'bar.sub2.sub3': 3
}

Build status Standard - JavaScript Style Guide

Installation

npm install flatten-obj

Usage

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:

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:

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

var flatten = require('flatten-obj')({ onlyLeaves: true })

var obj = {
  sub: {
    foo: 1,
    bar: {
      baz: 2
    }
  }
}

// outputs `{ foo: 1, baz: 2 }`
console.log(flatten(obj))

Brackets

Replace separator style to brackets (usable for URL query)

var flatten = require('flatten-obj')({ brackets: true })

var obj = {
  foo: {
    bar: 1
  }
}

// outputs `{ 'foo[bar]': 1 }`
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:

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:

{
  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:

{
  foo: [1, 2, 3],
  'bar.0.foo': 1,
  'bar.1.bar': 2
}

License

MIT

flatten-obj's People

Contributors

watson avatar parro-it avatar andreaazzini avatar chieftl avatar

Watchers

 avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.