javascript-unwind

A very simple native function for unwinding a collection by a property, like MongoDB's $unwind function.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
javascript-unwind
741.4.010 months ago5 years agoMinified + gzip package size for javascript-unwind in KB

Readme

javascript-unwind
Current npm version Current npm download count CircleCI Compatible with ES5 and greater
A very simple native function for unwinding a collection by a property, like MongoDB's $unwind function.

Features

  • This function is immutable. Your original collection doesn't change.
  • It works for both primitives and complex values.
  • It works for nested arrays, using dot-notation. Like a.b.c.
  • It works in ES5-compatible environments, without transpiling.
  • Typings available for TypeScript.

Installation

$ npm i javascript-unwind --save

How to use

Shallow level

const unwind = require('javascript-unwind');

const collection = [
  { a: [{ x: 1 }, { x: 2 }], b: 123 },
  { a: [{ x: 3 }, { x: 4 }], b: 785, c: 368 },
];

console.log(unwind(collection, 'a'));

Output:
[ { a: { x: 1 }, b: 123 },
 { a: { x: 2 }, b: 123 },
 { a: { x: 3 }, b: 785, c: 368 },
 { a: { x: 4 }, b: 785, c: 368 } ]

Deep level

const unwind = require('javascript-unwind');

const collection = [{ 
    name: 'a1', 
    b: [{ 
        name: 'b1', 
        c: [ { name: 'c1' }, { name: 'c2' } ] 
      }, { 
        name: 'b2', 
        c: [ { name: 'c3' }, { name: 'c4' } ] 
      }, 
    ], 
  }, { 
    name: 'a2', 
    b: [{ 
        name: 'b3', 
        c: [ { name: 'c4' }, { name: 'c5' } ]
      }, { 
        name: 'b4',
        c: [ { name: 'c6' }, { name: 'c7' } ] 
      }
    ]
  }
];

console.log(unwind(collection, 'b.c'));
Output:
[
  {
    "name":"a1",
    "b":{
      "name":"b1",
      "c":{
        "name":"c1"
      }
    }
  },
  {
    "name":"a1",
    "b":{
      "name":"b1",
      "c":{
        "name":"c2"
      }
    }
  },
  {
    "name":"a1",
    "b":{
      "name":"b2",
      "c":{
        "name":"c3"
      }
    }
  },
  {
    "name":"a1",
    "b":{
      "name":"b2",
      "c":{
        "name":"c4"
      }
    }
  },
  {
    "name":"a2",
    "b":{
      "name":"b3",
      "c":{
        "name":"c4"
      }
    }
  },
  {
    "name":"a2",
    "b":{
      "name":"b3",
      "c":{
        "name":"c5"
      }
    }
  },
  {
    "name":"a2",
    "b":{
      "name":"b4",
      "c":{
        "name":"c6"
      }
    }
  },
  {
    "name":"a2",
    "b":{
      "name":"b4",
      "c":{
        "name":"c7"
      }
    }
  }
]

Roadmap and Bugs

See Issues.