Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/doowb/group-array

Group array of objects into lists.
https://github.com/doowb/group-array

Last synced: 14 days ago
JSON representation

Group array of objects into lists.

Awesome Lists containing this project

README

        

# group-array [![NPM version](https://img.shields.io/npm/v/group-array.svg?style=flat)](https://www.npmjs.com/package/group-array) [![NPM monthly downloads](https://img.shields.io/npm/dm/group-array.svg?style=flat)](https://npmjs.org/package/group-array) [![NPM total downloads](https://img.shields.io/npm/dt/group-array.svg?style=flat)](https://npmjs.org/package/group-array) [![Linux Build Status](https://img.shields.io/travis/doowb/group-array.svg?style=flat&label=Travis)](https://travis-ci.org/doowb/group-array)

> Group array of objects into lists.

Please consider following this project's author, [Brian Woodward](https://github.com/doowb), and consider starring the project to show your :heart: and support.

- [Install](#install)
- [Usage](#usage)
- [Examples](#examples)
- [About](#about)

_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_

## Install

Install with [npm](https://www.npmjs.com/):

```sh
$ npm install --save group-array
```

## Usage

```js
var groupArray = require('group-array');
```

## Examples

```js
var arr = [
{tag: 'one', content: 'A'},
{tag: 'one', content: 'B'},
{tag: 'two', content: 'C'},
{tag: 'two', content: 'D'},
{tag: 'three', content: 'E'},
{tag: 'three', content: 'F'}
];

// group by the `tag` property
groupArray(arr, 'tag');
```

**results in:**

```js
{
one: [
{tag: 'one', content: 'A'},
{tag: 'one', content: 'B'}
],
two: [
{tag: 'two', content: 'C'},
{tag: 'two', content: 'D'}
],
three: [
{tag: 'three', content: 'E'},
{tag: 'three', content: 'F'}
]
}
```

**Group by multiple, deeply nested properties**

```js
// given an array of object, like blog posts...
var arr = [
{ data: { year: '2016', tag: 'one', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'feb', day: '12'}, content: '...'},
{ data: { year: '2016', tag: 'one', month: 'feb', day: '12'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'jan', day: '14'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'jan', day: '14'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'jan', day: '16'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'jan', day: '16'}, content: '...'},
{ data: { year: '2016', tag: 'two', month: 'feb', day: '18'}, content: '...'},
{ data: { year: '2017', tag: 'two', month: 'feb', day: '18'}, content: '...'},
{ data: { year: '2017', tag: 'two', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2017', tag: 'two', month: 'feb', day: '10'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'jan', day: '01'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'jan', day: '02'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'feb', day: '01'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'feb', day: '01'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'feb', day: '02'}, content: '...'},
{ data: { year: '2017', tag: 'three', month: 'feb', day: '02'}, content: '...'}
]
```

Pass a list or array of properties:

```js
groupArray(arr, 'data.year', 'data.tag', 'data.month', 'data.day');
```

**Results in something like this: (abbreviated)**

```js
{ '2016':
{ one:
{ jan:
{ '01':
[ { data: { year: '2016', tag: 'one', month: 'jan', day: '01' },
content: '...' },
{ data: { year: '2016', tag: 'one', month: 'jan', day: '01' },
content: '...' } ],
'02':
[ { data: { year: '2016', tag: 'one', month: 'jan', day: '02' },
content: '...' },
{ data: { year: '2016', tag: 'one', month: 'jan', day: '02' },
content: '...' } ] },
feb:
{ '10':
[ { data: { year: '2016', tag: 'one', month: 'feb', day: '10' },
content: '...' },
{ data: { year: '2016', tag: 'one', month: 'feb', day: '10' },
content: '...' } ],
'12':
[ { data: { year: '2016', tag: 'one', month: 'feb', day: '12' },
content: '...' },
{ data: { year: '2016', tag: 'one', month: 'feb', day: '12' },
content: '...' } ] } },
two:
{ jan:
{ '14':
[ { data: { year: '2016', tag: 'two', month: 'jan', day: '14' },
content: '...' },
{ data: { year: '2016', tag: 'two', month: 'jan', day: '14' },
content: '...' } ],
'16':
[ { data: { year: '2016', tag: 'two', month: 'jan', day: '16' },
content: '...' },
{ data: { year: '2016', tag: 'two', month: 'jan', day: '16' },
content: '...' } ] },
feb:
{ '18':
[ { data: { year: '2016', tag: 'two', month: 'feb', day: '18' },
content: '...' } ] } } },
'2017':
{ two:
{ feb:
{ '10':
[ { data: { year: '2017', tag: 'two', month: 'feb', day: '10' },
content: '...' },
{ data: { year: '2017', tag: 'two', month: 'feb', day: '10' },
content: '...' } ],
'18':
[ { data: { year: '2017', tag: 'two', month: 'feb', day: '18' },
content: '...' } ] } },
three:
{ jan:
{ '01':
[ { data: { year: '2017', tag: 'three', month: 'jan', day: '01' },
content: '...' },
{ data: { year: '2017', tag: 'three', month: 'jan', day: '01' },
content: '...' } ],
'02':
[ { data: { year: '2017', tag: 'three', month: 'jan', day: '02' },
content: '...' },
{ data: { year: '2017', tag: 'three', month: 'jan', day: '02' },
content: '...' } ] },
feb:
{ '01':
[ { data: { year: '2017', tag: 'three', month: 'feb', day: '01' },
content: '...' },
{ data: { year: '2017', tag: 'three', month: 'feb', day: '01' },
content: '...' } ],
'02':
[ { data: { year: '2017', tag: 'three', month: 'feb', day: '02' },
content: '...' },
{ data: { year: '2017', tag: 'three', month: 'feb', day: '02' },
content: '...' } ] } } } }
```

## About

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).

Running Tests

Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

```sh
$ npm install && npm test
```

Building docs

_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_

To generate the readme, run the following command:

```sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
```

### Related projects

You might also be interested in these projects:

* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays.")
* [get-value](https://www.npmjs.com/package/get-value): Use property paths like 'a.b.c' to get a nested value from an object. Even works… [more](https://github.com/jonschlinkert/get-value) | [homepage](https://github.com/jonschlinkert/get-value "Use property paths like 'a.b.c' to get a nested value from an object. Even works when keys have dots in them (no other dot-prop library can do this!).")
* [group-object](https://www.npmjs.com/package/group-object): Group object keys and values into lists. | [homepage](https://github.com/doowb/group-object "Group object keys and values into lists.")
* [union-value](https://www.npmjs.com/package/union-value): Set an array of unique values as the property of an object. Supports setting deeply… [more](https://github.com/jonschlinkert/union-value) | [homepage](https://github.com/jonschlinkert/union-value "Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation.")

### Contributors

| **Commits** | **Contributor** |
| --- | --- |
| 32 | [doowb](https://github.com/doowb) |
| 13 | [jonschlinkert](https://github.com/jonschlinkert) |
| 2 | [johlym](https://github.com/johlym) |
| 1 | [cperryk](https://github.com/cperryk) |

### Author

**Brian Woodward**

* [GitHub Profile](https://github.com/doowb)
* [Twitter Profile](https://twitter.com/doowb)
* [LinkedIn Profile](https://linkedin.com/in/woodwardbrian)

### License

Copyright © 2019, [Brian Woodward](https://github.com/doowb).
Released under the [MIT License](LICENSE).

***

_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on July 22, 2019._