dot-object
    DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/dot-object package

    2.1.4 • Public • Published

    Build Status

    Dot-Object

    Dot-Object makes it possible to transform javascript objects using dot notation.

    Installation

    Install from npm:

      npm install dot-object --save
    

    Install from bower:

      bower install dot-object --save
    

    Download

    Usage

    Move a property within one object to another location

    var dot = require('dot-object');
     
    var obj = {
      'first_name': 'John',
      'last_name': 'Doe'
    };
     
    dot.move('first_name', 'contact.firstname', obj);
    dot.move('last_name', 'contact.lastname', obj);
     
    console.log(obj);
     
    {
      contact: {
        firstname: 'John',
        lastname: 'Doe'
      }
    }
     

    Copy property from one object to another

    var dot = require('dot-object');
     
    var src = {
      name: 'John',
      stuff: {
        phone: {
          brand: 'iphone',
          version: 6
        }
      }
    };
     
    var tgt = {name: 'Brandon'};
     
    dot.copy('stuff.phone', 'wanna.haves.phone', src, tgt);
     
    console.log(tgt);
     
    {
      name: 'Brandon',
      wanna: {
        haves: {
          phone: {
            brand: 'iphone',
            version: 6
          }
        }
      }
    }
     

    Transfer property from one object to another

    Does the same as copy but removes the value from the source object:

    dot.transfer('stuff.phone', 'wanna.haves.phone', src, tgt);
     
    // src: {"name":"John","stuff":{}}
    // tgt: {"name":"Brandon","wanna":{"haves":{"phone":{"brand":"iphone","version":6}}}

    Expand to an object

    var dot = require('dot-object');
     
    var row = {
      'id': 2,
      'contact.name.first': 'John',
      'contact.name.last': 'Doe',
      'contact.email': 'example@gmail.com',
      'contact.info.about.me': 'classified',
      'devices[0]': 'mobile',
      'devices[1]': 'laptop',
      'some.other.things.0': 'this',
      'some.other.things.1': 'that'
    };
     
    dot.object(row);
     
    console.log(row);
     
    {
      "id": 2,
      "contact": {
        "name": {
          "first": "John",
          "last": "Doe"
        },
        "email": "example@gmail.com",
        "info": {
          "about": {
            "me": "classified"
          }
        }
      },
      "devices": [
        "mobile",
        "laptop"
      ],
      "some": {
        "other": {
          "things": [
            "this",
            "that"
          ]
        }
      }
    }

    To convert manually per string use:

    var dot = require('dot-object');
     
    var tgt = { val: 'test' };
    dot.str('this.is.my.string', 'value', tgt);
     
    console.log(tgt);
     
    {
      "val": "test",
      "this": {
        "is": {
          "my": {
            "string": "value"
          }
        }
      }
    }

    Pick a value using dot notation:

    Picks a value from the object without removing it.

    var dot = require('dot-object');
     
    var obj = {
     some: {
       nested: {
         value: 'Hi there!'
       }
     }
    };
     
    var val = dot.pick('some.nested.value', obj);
    console.log(val);
     
    Hi there!

    Delete/Remove a value using dot notation:

    Remove and delete mostly behave the same, but in case of a path addressing array items:

    • delete will re-index the array.
    • remove will retain array indexes
    var dot = require('dot-object');
     
    var obj = {
     a: 'Hi There!',
     nested: {
       array: [ 
         'Veni',
         'Vidi',
         'Vici',
       ]
     }
    };
     
    var val = dot.delete('a', obj);
    console.log(val);
     
    Hi There!
     
    // To remove an item and directly update any array indexes use:
    var val = dot.delete('nested.array[1]', obj);
    console.log(val);
     
    Vidi
     
    // Remove a value but retain array indexes. 
    var val = dot.remove('nested.array[1]', obj);
     
    // To remove multiple paths at once:
    var val = dot.remove(['nested.array[0]', 'nested.array[2]'], obj);

    Using modifiers

    You can use modifiers to translate values on the fly.

    This example uses the underscore.string library.

    var dot = require('dot-object');
     
    var _s = require('underscore.string');
     
    var row = {
      'nr': 200,
      'doc.name': '    My Document   '
    };
     
    var mods = {
      "doc.name": [_s.trim, _s.underscored],
    };
     
    dot.object(row, mods);
     
    console.log(row);
    {
      "nr": 200,
      "doc": {
        "name": "my_document"
      }
    }
    

    Or using .str() directy:

     
    var dot = require('dot-object');
    var _s = require('underscore.string');
    var obj = { id: 100 };
     
    // use one modifier
    dot.str('my.title', 'this is my title', obj, _s.slugify);
     
    // multiple modifiers
    dot.str('my.title', '   this is my title  ', obj, [_s.trim, _s.slugify]);
     
    console.log(obj);

    Result:

    {
      "id": 100,
      "my": {
        "title": "this-is-my-title"
      }
    }

    Transform object

    var dot = require('dot-object');
     
    var source = {
      "id": 1,
      "contact": {
        "firstName": "John",
        "lastName": "Doe",
        "email": "example@gmail.com",
      }
    }
     
    var recipe = {
      'id': 'nr',
      'contact.firstName': 'name.first',
      'contact.lastName': 'name.last',
      'contact.email': 'email'
    };
     
    var tgt = {}
    dot.transform(recipe, source, tgt);
     
    // OR
     
    var tgt = dot.transform(recipe, source);
     
    console.log(tgt);
    {
      "nr": 1,
      "name": {
        "first": "John",
        "last": "Doe"
      },
      "email": "example@gmail.com"
    }

    Convert object to dotted-key/value pair

    var dot = require('dot-object');
     
    var obj = {
      id: 'my-id',
      nes: { ted: { value: true } },
      other: { nested: { stuff: 5 } },
      some: { array: ['A', 'B'] }
    };
     
    var tgt = dot.dot(obj);
     
    // or
     
    var tgt = {};
    dot.dot(obj, tgt);
     
    console.log(tgt);

    Result:

    {
      "id": "my-id",
      "nes.ted.value": true,
      "other.nested.stuff": 5,
      "some.array[0]": "A",
      "some.array[1]": "B"
    }

    Keep array

    Set keepArray to true.

    var dot = require('dot-object');
     
    var obj = {
      id: 'my-id',
      other: [1, 2, 3],
      some: { array: ['A', 'B'] }
    };
     
    dot.keepArray = true;
    var tgt = dot.dot(obj);
     
    console.log(tgt);

    Result:

    {
      "id": "my-id",
      "other": [1, 2, 3],
      "some.array": ["A", "B"]
    }

    Using a different separator

    If you do not like dot notation, you are free to specify a different separator.

    var Dot = require('dot-object');
     
    var dot = new Dot('->');
     
    var _s = require('underscore.string');
     
    var row = {
      'nr': 200,
      'doc->name': '    My Document   '
    };
     
    var mods = {
      "doc->name": [_s.trim, _s.underscored],
    };
     
    dot.object(row, mods);
     
    console.log(row);
    {
      "nr": 200,
      "doc": {
        "name": "my_document"
      }
    }
    

    Transforming SQL results to JSON

    SQL translation on the fly:

     // TODO
     

    Copyright © 2013 Rob Halff, released under the MIT license

    Install

    npm i dot-object

    DownloadsWeekly Downloads

    185,528

    Version

    2.1.4

    License

    none

    Unpacked Size

    110 kB

    Total Files

    38

    Last publish

    Collaborators

    • rhalff