{"_id":"utils","_rev":"938003","name":"utils","description":"Fast, generic JavaScript/node.js utility functions.","dist-tags":{"latest":"0.3.1"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"time":{"modified":"2021-09-23T02:05:06.000Z","created":"2014-10-08T19:36:56.500Z","0.3.1":"2015-09-24T00:06:49.213Z","0.2.2":"2015-04-28T19:12:43.655Z","0.2.1":"2015-04-25T08:35:26.545Z","0.2.0":"2015-04-19T20:14:04.196Z","0.1.6":"2015-03-25T19:54:44.122Z","0.1.5":"2015-03-25T08:05:06.648Z","0.0.2":"2014-11-15T08:47:04.274Z","0.0.1":"2014-10-08T19:36:56.500Z"},"users":{"nosthertus":true,"luuhoangnam":true,"wenhsiaoyi":true,"rajikaimal":true,"d7game":true,"astesio":true,"sternelee":true},"author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/jonschlinkert/utils.git"},"versions":{"0.3.1":{"name":"utils","description":"Fast, generic JavaScript/node.js utility functions.","version":"0.3.1","homepage":"https://github.com/jonschlinkert/utils","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git+https://github.com/jonschlinkert/utils.git"},"bugs":{"url":"https://github.com/jonschlinkert/utils/issues"},"license":"MIT","files":["index.js","lib/"],"main":"index.js","engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"any":"^1.0.0","arr-diff":"^1.1.0","arr-flatten":"^1.0.1","arr-map":"^2.0.0","arr-union":"^3.0.0","array-each":"^0.1.1","array-slice":"^0.2.3","array-unique":"^0.2.1","center-align":"^0.1.1","export-dirs":"^0.2.4","export-files":"^2.1.0","for-in":"^0.1.4","for-own":"^0.1.3","has-values":"^0.1.3","is-number":"^2.0.2","is-plain-object":"^2.0.1","kind-of":"^2.0.1","make-iterator":"^0.2.0","object.defaults":"^0.3.0","object.filter":"^0.3.0","object.omit":"^2.0.0","object.pick":"^1.1.1","object.reduce":"^0.1.7","right-align":"^0.1.3","striptags":"^2.0.3","word-wrap":"^1.1.0"},"devDependencies":{"chalk":"^1.1.1","gulp":"^3.9.0","gulp-istanbul":"^0.10.0","gulp-jshint":"^1.11.2","gulp-mocha":"^2.1.3","jshint-stylish":"^2.0.1","mocha":"^2.3.2","relative":"^3.0.1","should":"^7.1.0","through2":"^2.0.0","verb":"^0.8.10","vinyl":"^0.5.3"},"keywords":["array","collection","function","lang","language","math","object","object","string","util","utils"],"verb":{"deps":{"ignore":["staging"]}},"gitHead":"e2a68bdc5ad18c01c8731b34c509a6e542f4f32a","_id":"utils@0.3.1","_shasum":"04efaeb4290a67037a4cddfd2ff56144cc3a4581","_from":".","_npmVersion":"2.10.1","_nodeVersion":"0.12.4","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"04efaeb4290a67037a4cddfd2ff56144cc3a4581","size":18754,"noattachment":false,"key":"/utils/-/utils-0.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/utils/download/utils-0.3.1.tgz"},"directories":{},"publish_time":1443053209213,"_cnpm_publish_time":1443053209213,"_hasShrinkwrap":false},"0.2.2":{"name":"utils","description":"Fast, generic JavaScript/node.js utility functions.","version":"0.2.2","homepage":"https://github.com/jonschlinkert/utils","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git://github.com/jonschlinkert/utils.git"},"bugs":{"url":"https://github.com/jonschlinkert/utils/issues"},"license":{"type":"MIT","url":"https://github.com/jonschlinkert/utils/blob/master/LICENSE"},"files":["index.js","lib/"],"main":"index.js","engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"any":"^1.0.0","arr-diff":"^1.0.1","arr-flatten":"^1.0.1","arr-map":"^2.0.0","arr-union":"^2.0.1","array-each":"^0.1.1","array-slice":"^0.2.3","array-unique":"^0.2.1","center-align":"^0.1.1","export-dirs":"^0.2.4","export-files":"^2.0.1","for-in":"^0.1.4","for-own":"^0.1.3","has-values":"^0.1.3","is-number":"^1.1.2","is-plain-object":"^1.0.0","kind-of":"^1.1.0","make-iterator":"^0.1.1","object.defaults":"^0.3.0","object.filter":"^0.3.0","object.omit":"^1.1.0","object.pick":"^1.1.1","object.reduce":"^0.1.7","right-align":"^0.1.1","word-wrap":"^1.0.2"},"devDependencies":{"chalk":"^1.0.0","gulp-istanbul":"^0.8.1","gulp-jshint":"^1.10.0","gulp-mocha":"^2.0.1","gulp-util":"^3.0.4","jshint-stylish":"^1.0.1","mocha":"^2.2.4","relative":"^3.0.0","should":"^6.0.1","through2":"^0.6.5","verb":"^0.7.0","vinyl":"^0.4.6"},"keywords":["array","collection","function","lang","language","math","object","object","string","util","utils"],"verb":{"deps":{"ignore":["staging"]}},"gitHead":"31906fc0c6493e599069be16a14172a117f68405","_id":"utils@0.2.2","_shasum":"bf0d99ab11d8580ad5adefe8aec1715dd5f5e8fb","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"bf0d99ab11d8580ad5adefe8aec1715dd5f5e8fb","size":16494,"noattachment":false,"key":"/utils/-/utils-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/utils/download/utils-0.2.2.tgz"},"directories":{},"publish_time":1430248363655,"_cnpm_publish_time":1430248363655,"_hasShrinkwrap":false},"0.2.1":{"name":"utils","description":"Fast, generic JavaScript/node.js utility functions.","version":"0.2.1","homepage":"https://github.com/jonschlinkert/utils","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git://github.com/jonschlinkert/utils.git"},"bugs":{"url":"https://github.com/jonschlinkert/utils/issues"},"license":{"type":"MIT","url":"https://github.com/jonschlinkert/utils/blob/master/LICENSE"},"files":["index.js","lib/"],"main":"index.js","engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"any":"^1.0.0","arr-diff":"^1.0.1","arr-flatten":"^1.0.1","arr-map":"^2.0.0","arr-union":"^2.0.1","array-each":"^0.1.0","array-slice":"^0.2.3","array-unique":"^0.2.1","center-align":"^0.1.1","export-dirs":"^0.2.4","export-files":"^2.0.1","for-in":"^0.1.4","for-own":"^0.1.3","has-values":"^0.1.3","is-number":"^1.1.2","is-plain-object":"^1.0.0","kind-of":"^1.1.0","make-iterator":"^0.1.1","object.defaults":"^0.3.0","object.filter":"^0.3.0","object.omit":"^1.1.0","object.pick":"^1.1.1","object.reduce":"^0.1.7","right-align":"^0.1.1","word-wrap":"^1.0.2"},"devDependencies":{"chalk":"^1.0.0","gulp-istanbul":"^0.8.1","gulp-jshint":"^1.10.0","gulp-mocha":"^2.0.1","gulp-util":"^3.0.4","jshint-stylish":"^1.0.1","lodash":"^3.7.0","mocha":"^2.2.4","relative":"^3.0.0","should":"^6.0.1","through2":"^0.6.5","verb":"^0.7.0","vinyl":"^0.4.6"},"keywords":["array","collection","function","lang","language","math","object","object","string","util","utils"],"verb":{"deps":{"ignore":["staging"]}},"gitHead":"1f43d10c981eb7960598e6af8cb9156516df1912","_id":"utils@0.2.1","_shasum":"805e6dd87449b0dbe7402b0071242f2cb3e0283d","_from":".","_npmVersion":"2.7.4","_nodeVersion":"0.12.2","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"805e6dd87449b0dbe7402b0071242f2cb3e0283d","size":16530,"noattachment":false,"key":"/utils/-/utils-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/utils/download/utils-0.2.1.tgz"},"directories":{},"publish_time":1429950926545,"_cnpm_publish_time":1429950926545,"_hasShrinkwrap":false},"0.2.0":{"name":"utils","description":"Fast, generic JavaScript/node.js utility functions.","version":"0.2.0","homepage":"https://github.com/jonschlinkert/utils","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git://github.com/jonschlinkert/utils.git"},"bugs":{"url":"https://github.com/jonschlinkert/utils/issues"},"license":{"type":"MIT","url":"https://github.com/jonschlinkert/utils/blob/master/LICENSE"},"files":["index.js","lib/"],"main":"index.js","engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"any":"^1.0.0","arr-diff":"^1.0.1","arr-flatten":"^1.0.1","arr-map":"^2.0.0","arr-union":"^2.0.1","array-each":"^0.1.0","array-slice":"^0.2.3","array-unique":"^0.2.1","center-align":"^0.1.1","export-dirs":"^0.2.4","export-files":"^2.0.1","for-in":"^0.1.4","for-own":"^0.1.3","has-values":"^0.1.3","is-number":"^1.1.2","is-plain-object":"^1.0.0","kind-of":"^1.1.0","make-iterator":"^0.1.1","object.defaults":"^0.3.0","object.filter":"^0.3.0","object.omit":"^1.1.0","object.pick":"^1.1.1","object.reduce":"^0.1.6","right-align":"^0.1.1","word-wrap":"^1.0.2"},"devDependencies":{"chalk":"^1.0.0","gulp-istanbul":"^0.8.1","gulp-jshint":"^1.10.0","gulp-mocha":"^2.0.1","gulp-util":"^3.0.4","jshint-stylish":"^1.0.1","lodash":"^3.7.0","mocha":"^2.2.4","relative":"^3.0.0","should":"^6.0.1","through2":"^0.6.5","verb":"^0.5.0","vinyl":"^0.4.6"},"keywords":["array","collection","function","lang","language","math","object","object","string","util","utils"],"verb":{"deps":{"ignore":["staging"]}},"gitHead":"1f43d10c981eb7960598e6af8cb9156516df1912","_id":"utils@0.2.0","_shasum":"9243b5a3c929223494dae604a58af813715f3b9f","_from":".","_npmVersion":"2.5.1","_nodeVersion":"0.12.0","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"9243b5a3c929223494dae604a58af813715f3b9f","size":15944,"noattachment":false,"key":"/utils/-/utils-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/utils/download/utils-0.2.0.tgz"},"directories":{},"publish_time":1429474444196,"_cnpm_publish_time":1429474444196,"_hasShrinkwrap":false},"0.1.6":{"name":"utils","description":"Fast, generic JavaScript/node.js utility functions.","version":"0.1.6","homepage":"https://github.com/jonschlinkert/utils","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git://github.com/jonschlinkert/utils.git"},"bugs":{"url":"https://github.com/jonschlinkert/utils/issues"},"license":{"type":"MIT","url":"https://github.com/jonschlinkert/utils/blob/master/LICENSE"},"files":["index.js","lib/"],"main":"index.js","engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"any":"^1.0.0","arr-diff":"^1.0.1","arr-flatten":"^1.0.1","arr-map":"^2.0.0","arr-union":"^2.0.1","array-unique":"^0.2.1","center-align":"^0.1.1","export-dirs":"^0.2.4","export-files":"^2.0.1","for-in":"^0.1.4","for-own":"^0.1.3","has-values":"^0.1.2","is-number":"^1.1.2","is-plain-object":"^1.0.0","kind-of":"^1.1.0","make-iterator":"^0.1.1","object.filter":"^0.3.0","object.omit":"^0.2.1","object.pick":"^1.1.1","object.reduce":"^0.1.6","right-align":"^0.1.1","word-wrap":"^1.0.2"},"devDependencies":{"chalk":"^1.0.0","gulp-istanbul":"^0.7.0","gulp-jshint":"^1.9.4","gulp-mocha":"^2.0.0","gulp-util":"^3.0.4","jshint-stylish":"^1.0.1","lodash":"^3.5.0","mocha":"*","relative":"^2.0.0","should":"*","strip-ansi":"^2.0.1","through2":"^0.6.3","verb":"^0.5.0","vinyl":"^0.4.6"},"keywords":["array","collection","function","lang","language","math","object","object","string","util","utils"],"verb":{"deps":{"ignore":["staging"]}},"gitHead":"f1d45d0599dd241cb11ccb0b114a746c145fdd89","_id":"utils@0.1.6","_shasum":"a20b863e4e3bd2b0d703314467e78d897023fea9","_from":".","_npmVersion":"2.7.1","_nodeVersion":"1.6.2","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"a20b863e4e3bd2b0d703314467e78d897023fea9","size":14669,"noattachment":false,"key":"/utils/-/utils-0.1.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/utils/download/utils-0.1.6.tgz"},"directories":{},"publish_time":1427313284122,"_cnpm_publish_time":1427313284122,"_hasShrinkwrap":false},"0.1.5":{"name":"utils","description":"Fast, generic JavaScript/node.js utility functions.","version":"0.1.5","homepage":"https://github.com/jonschlinkert/utils","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git://github.com/jonschlinkert/utils.git"},"bugs":{"url":"https://github.com/jonschlinkert/utils/issues"},"license":{"type":"MIT","url":"https://github.com/jonschlinkert/utils/blob/master/LICENSE"},"files":["index.js","lib/"],"main":"index.js","engines":{"node":">=0.10.0"},"scripts":{"test":"mocha"},"dependencies":{"any":"^1.0.0","arr-diff":"^1.0.1","arr-flatten":"^1.0.1","arr-map":"^2.0.0","arr-union":"^2.0.1","array-unique":"^0.2.1","center-align":"^0.1.1","export-dirs":"^0.2.4","export-files":"^2.0.1","for-in":"^0.1.4","for-own":"^0.1.3","has-values":"^0.1.2","is-number":"^1.1.2","is-plain-object":"^1.0.0","kind-of":"^1.1.0","make-iterator":"^0.1.1","object.filter":"^0.3.0","object.omit":"^0.2.1","object.pick":"^1.1.1","object.reduce":"^0.1.6","right-align":"^0.1.1","word-wrap":"^1.0.2"},"devDependencies":{"chalk":"^1.0.0","gulp-istanbul":"^0.7.0","gulp-jshint":"^1.9.4","gulp-mocha":"^2.0.0","gulp-util":"^3.0.4","jshint-stylish":"^1.0.1","lodash":"^3.5.0","mocha":"*","relative":"^2.0.0","should":"*","strip-ansi":"^2.0.1","through2":"^0.6.3","verb":"^0.5.0","vinyl":"^0.4.6"},"keywords":["util","utils"],"verb":{"deps":{"ignore":["staging"]}},"gitHead":"f3769ef804d8bd1748fdf41bd71fd5b2cee808ad","_id":"utils@0.1.5","_shasum":"d316b717633e1e65136d3725799a7461a0be281a","_from":".","_npmVersion":"2.7.1","_nodeVersion":"1.6.2","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"d316b717633e1e65136d3725799a7461a0be281a","size":13914,"noattachment":false,"key":"/utils/-/utils-0.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/utils/download/utils-0.1.5.tgz"},"directories":{},"publish_time":1427270706648,"_cnpm_publish_time":1427270706648,"_hasShrinkwrap":false},"0.0.2":{"name":"utils","description":"Generic utility functions for JavaScript/node.js","version":"0.0.2","homepage":"https://github.com/jonschlinkert/utils","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git://github.com/jonschlinkert/utils.git"},"bugs":{"url":"https://github.com/jonschlinkert/utils/issues"},"licenses":[{"type":"MIT","url":"https://github.com/jonschlinkert/utils/blob/master/LICENSE-MIT"}],"main":"index.js","engines":{"node":">=0.10.0"},"scripts":{"test":"mocha -R spec"},"devDependencies":{"mocha":"*"},"dependencies":{"arr-flatten":"^0.2.1","array-slice":"^0.2.2","dirs":"^0.1.2","for-in":"^0.1.3","for-own":"^0.1.2","has-value":"^0.1.0","is-directory":"^0.2.2","kind-of":"^0.1.2","make-iterator":"^0.1.1","object.filter":"^0.2.0","object.omit":"^0.2.1","object.pick":"^0.1.1","object.reduce":"^0.1.3"},"_id":"utils@0.0.2","_shasum":"dc104ffd1b5ea0d0a0bf02ae93840bee08750817","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"dc104ffd1b5ea0d0a0bf02ae93840bee08750817","size":5103,"noattachment":false,"key":"/utils/-/utils-0.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/utils/download/utils-0.0.2.tgz"},"directories":{},"publish_time":1416041224274,"_cnpm_publish_time":1416041224274,"_hasShrinkwrap":false},"0.0.1":{"name":"utils","description":"The most interesting project in the world > Verb","version":"0.0.1","homepage":"https://github.com/jonschlinkert/utils","author":{"name":"Jon Schlinkert","url":"https://github.com/jonschlinkert"},"repository":{"type":"git","url":"git://github.com/jonschlinkert/utils.git"},"bugs":{"url":"https://github.com/jonschlinkert/utils/issues"},"licenses":[{"type":"MIT","url":"https://github.com/jonschlinkert/utils/blob/master/LICENSE-MIT"}],"main":"index.js","engines":{"node":">=0.10.0"},"scripts":{"test":"mocha -R spec"},"devDependencies":{"verb-tag-jscomments":">= 0.2.0","verb":">= 0.2.6","mocha":"*"},"keywords":["docs","documentation","generate","generator","markdown","templates","verb"],"_id":"utils@0.0.1","_shasum":"dc0b9f59988138090e3e7fb0f15900c09ee5b256","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"jonschlinkert","email":"github@sellside.com"},"maintainers":[{"name":"jonschlinkert","email":"github@sellside.com"}],"dist":{"shasum":"dc0b9f59988138090e3e7fb0f15900c09ee5b256","size":2177,"noattachment":false,"key":"/utils/-/utils-0.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/utils/download/utils-0.0.1.tgz"},"directories":{},"publish_time":1412797016500,"_cnpm_publish_time":1412797016500,"_hasShrinkwrap":false}},"readme":"# utils [![NPM version](https://badge.fury.io/js/utils.svg)](http://badge.fury.io/js/utils)  [![Build Status](https://travis-ci.org/jonschlinkert/utils.svg)](https://travis-ci.org/jonschlinkert/utils)\n\n> Fast, generic JavaScript/node.js utility functions.\n\nInstall with [npm](https://www.npmjs.com/)\n\n```sh\n$ npm i utils --save\n```\n\n## TOC\n\n<!-- toc -->\n\n* [Usage](#usage)\n* [API](#api)\n* [Code coverage](#code-coverage)\n* [Running tests](#running-tests)\n* [Contributing](#contributing)\n  - [Adding utils](#adding-utils)\n  - [Updating the docs](#updating-the-docs)\n  - [Running verb](#running-verb)\n* [About](#about)\n* [Related projects](#related-projects)\n* [Author](#author)\n* [License](#license)\n\n_(Table of contents generated by [verb](https://github.com/verbose/verb))_\n\n<!-- tocstop -->\n\n## Usage\n\n**Utils grouped by collection**\n\nThe top level export gives you an object with utils grouped into collections, like `array`, `object`, `math`, etc:\n\n```js\nvar utils = require('utils');\n//=> {array: {flatten: [function], ...}, collection: {...}}\n```\n\nSee [example.md](./example.md) for an example of the `utils` object.\n\n**Get all utils on one object**\n\nIf you want all utils on a single object (e.g. not grouped by collection):\n\n```js\n// all utils are on the `_` property\nvar utils = require('utils')._;\n```\n\n**Only get a specific collection**\n\nIf you just want the `string` or `object` utils:\n\n```js\nvar string = require('utils').string;\nvar object = require('utils').object;\n```\n\n## API\n\n### [.after](lib/array/after.js#L19)\n\nReturns all of the items in an array after the specified index.\n\n**Params**\n\n* `array` **{Array}**: Collection\n* `n` **{Number}**: Starting index (number of items to exclude)\n* `returns` **{Array}**: Array exluding `n` items.\n\n**Example**\n\n```js\nafter(['a', 'b', 'c'], 1)\n//=> ['c']\n```\n\n### [.arrayify](lib/array/arrayify.js#L20)\n\nCast the give `value` to an array.\n\n**Params**\n\n* `val` **{*}**\n* `returns` **{Array}**\n\n**Example**\n\n```js\narrayify('abc')\n//=> ['abc']\n\narrayify(['abc'])\n//=> ['abc']\n```\n\n### [.before](lib/array/before.js#L20)\n\nReturns all of the items in an array up to the specified number Opposite of `<%= after() %`.\n\n**Params**\n\n* `array` **{Array}**\n* `n` **{Number}**\n* `returns` **{Array}**: Array excluding items after the given number.\n\n**Example**\n\n```js\nbefore(['a', 'b', 'c'], 2)\n//=> ['a', 'b']\n```\n\n### [.compact](lib/array/compact.js#L17)\n\nRemove all falsey values from an array.\n\n**Params**\n\n* `arr` **{Array}**\n* `returns` **{Array}**\n\n**Example**\n\n```js\ncompact([null, a, undefined, 0, false, b, c, '']);\n//=> [a, b, c]\n```\n\n### [.difference](lib/array/difference.js#L24)\n\nReturn the difference between the first array and additional arrays.\n\n**Params**\n\n* `a` **{Array}**\n* `b` **{Array}**\n* `returns` **{Array}**\n\n**Example**\n\n```js\nvar a = ['a', 'b', 'c', 'd'];\nvar b = ['b', 'c'];\n\ndiff(a, b);\n//=> ['a', 'd']\n```\n\n### [.each](lib/array/each.js#L27)\n\nLoop over each item in an array and call the given function on every element.\n\n**Params**\n\n* `array` **{Array}**\n* `fn` **{Function}**\n* `thisArg` **{Object}**: Optionally pass a `thisArg` to be used as the context in which to call the function.\n* `returns` **{Array}**\n\n**Example**\n\n```js\neach(['a', 'b', 'c'], function (ele) {\n  return ele + ele;\n});\n//=> ['aa', 'bb', 'cc']\n\neach(['a', 'b', 'c'], function (ele, i) {\n  return i + ele;\n});\n//=> ['0a', '1b', '2c']\n```\n\n### [.first](lib/array/first.js#L20)\n\nReturns the first item, or first `n` items of an array.\n\n**Params**\n\n* `array` **{Array}**\n* `n` **{Number}**: Number of items to return, starting at `0`.\n* `returns` **{Array}**\n\n**Example**\n\n```js\nfirst(['a', 'b', 'c', 'd', 'e'], 2)\n//=> ['a', 'b']\n```\n\n### [.flatten](lib/array/flatten.js#L18)\n\nRecursively flatten an array or arrays. Uses the fastest implementation of array flatten for node.js\n\n**Params**\n\n* `array` **{Array}**\n* `returns` **{Array}**: Flattened array\n\n**Example**\n\n```js\nflatten(['a', ['b', ['c']], 'd', ['e']]);\n//=> ['a', 'b', 'c', 'd', 'e']\n```\n\n### [.forEach](lib/array/forEach.js#L27)\n\nLoop over each item in an array and call the given function on every element.\n\n**Params**\n\n* `array` **{Array}**\n* `fn` **{Function}**\n* `thisArg` **{Object}**: Optionally pass a `thisArg` to be used as the context in which to call the function.\n* `returns` **{Array}**\n\n**Example**\n\n```js\nforEach(['a', 'b', 'c'], function (ele) {\n  return ele + ele;\n});\n//=> ['aa', 'bb', 'cc']\n\nforEach(['a', 'b', 'c'], function (ele, i) {\n  return i + ele;\n});\n//=> ['0a', '1b', '2c']\n```\n\n### [.isArray](lib/array/isArray.js#L19)\n\nReturns true if the given `value` is an array.\n\n**Params**\n\n* `value` **{Array}**: Value to test.\n\n**Example**\n\n```js\nisArray(1);\n//=> 'false'\n\nisArray([1]);\n//=> 'true'\n```\n\n### [.last](lib/array/last.js#L20)\n\nReturns the last item, or last `n` items of an array.\n\n**Params**\n\n* `array` **{Array}**\n* `n` **{Number}**: Number of items to return, starting with the last item.\n* `returns` **{Array}**\n\n**Example**\n\n```js\nlast(['a', 'b', 'c', 'd', 'e'], 2)\n//=> ['d', 'e']\n```\n\n### [.map](lib/array/map.js#L27)\n\nReturns a new array with the results of calling the given function on every element in the array. This is a faster, node.js focused alternative to JavaScript's native array map.\n\n**Params**\n\n* `array` **{Array}**\n* `fn` **{Function}**\n* `returns` **{Array}**\n\n**Example**\n\n```js\nmap(['a', 'b', 'c'], function (ele) {\n  return ele + ele;\n});\n//=> ['aa', 'bb', 'cc']\n\nmap(['a', 'b', 'c'], function (ele, i) {\n  return i + ele;\n});\n//=> ['0a', '1b', '2c']\n```\n\n### [.slice](lib/array/slice.js#L21)\n\nAlternative to JavaScript's native array-slice method. Slices `array` from the `start` index up to but not including the `end` index.\n\n**Params**\n\n* `array` **{Array}**: the array to slice.\n* `start` **{Number}**: Optionally define the starting index.\n* `end` **{Number}**: Optionally define the ending index.\n\n**Example**\n\n```js\nvar arr = ['a', 'b', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];\n\nslice(arr, 3, 6);\n//=> ['e', 'f', 'g']\n```\n\n### [.union](lib/array/union.js#L19)\n\nReturn an array free of duplicate values. Fastest ES5 implementation.\n\n**Params**\n\n* `array` **{Array}**: The array to uniquify\n* `returns` **{Array}**: With all union values.\n\n**Example**\n\n```js\nunion(['a', 'b', 'c', 'c']);\n//=> ['a', 'b', 'c']\n```\n\n### [.unique](lib/array/unique.js#L19)\n\nReturn an array free of duplicate values. Fastest ES5 implementation.\n\n**Params**\n\n* `array` **{Array}**: The array to uniquify\n* `returns` **{Array}**: With all unique values.\n\n**Example**\n\n```js\nunique(['a', 'b', 'c', 'c']);\n//=> ['a', 'b', 'c']\n```\n\n### [.any](lib/collection/any.js#L14)\n\nReturns `true` if `value` exists in the given string, array\nor object. See [any] for documentation.\n\n**Params**\n\n* `value` **{*}**\n* `target` **{*}**\n* `options` **{Object}**\n\n### [.contains](lib/collection/contains.js#L17)\n\nReturn true if `collection` contains `value`\n\n**Params**\n\n* `collection` **{Array|Object}**\n* `string` **{*}**\n* `returns` **{Boolean}**\n\n### [.tryRead](lib/fs/tryRead.js#L15)\n\nTry to read the given `filepath`, fail silently and return `null`\nwhen a file doesn't exist. Slightly faster than using `fs.existsSync`.\n\n**Params**\n\n* `fp` **{String}**: Path of the file to read.\n* `returns` **{String|Null}**: the `utf8` contents string, or `null` if an error is thrown.\n\n### [.tryReaddir](lib/fs/tryReaddir.js#L16)\n\nTry to read the given `directory`. Wraps `fs.readdirSync()` with\na try/catch, so it fails silently instead of throwing when the\ndirectory doesn't exist.\n\n**Params**\n\n* `dir` **{String}**: Starting directory\n* `returns` **{Array}**: Array of files.\n\n### [.tryRequire](lib/fs/tryRequire.js#L15)\n\nTry to require the given file, returning `null` if not successful\ninstead of throwing an error.\n\n**Params**\n\n* `fp` **{String}**: File path of the file to require\n* `returns` **{*}**: Returns the module function/object, or `null` if not found.\n\n### [.identity](lib/function/identity.js#L11)\n\nReturns the first argument passed to the function.\n\n* `returns` **{*}**\n\n### [.noop](lib/function/noop.js#L12)\n\nA \"no-operation\" function. Returns `undefined` regardless\nof the arguments it receives.\n\n* `returns` **{undefined}**\n\n### [.partialRight](lib/function/partialRight.js#L25)\n\nPartially applies arguments that will be appended to those provided to the returned function.\n\n**Params**\n\n* `ctx` **{Object}**: Optionally supply an invocation context for the returned function.\n* `fn` **{Function}**: The function to which arguments should be partially applied.\n* `arguments` __{..._}_*: List of arguments to be partially applied.\n* `returns` **{Function}**: Returns a function with partially applied arguments.\n\n**Example**\n\n```js\nfunction fullname(first, last) {\n  return first + ' ' + last;\n}\n\nvar name = partialRight(fn, 'Woodward');\nname('Brian');\n//=> 'Brian Woodward'\n```\n\n### [.hasValues](lib/lang/hasValues.js#L34)\n\nReturns true if any value exists, false if empty. Works for booleans, functions, numbers, strings, nulls, objects and arrays.\n\n**Params**\n\n* `object` **{Object}**: The object to check for `value`\n* `value` **{*}**: the value to look for\n* `returns` **{Boolean}**: True if any values exists.\n\n**Example**\n\n```js\nhasValues('a');\n//=> true\n\nhasValues('');\n//=> false\n\nhasValues(1);\n//=> true\n\nhasValues({a: 'a'}});\n//=> true\n\nhasValues({}});\n//=> false\n\nhasValues(['a']);\n//=> true\n```\n\n### [.isEmpty](lib/lang/isEmpty.js#L37)\n\nReturns true if the given value is empty, false if any value exists. Works for booleans, functions, numbers, strings, nulls, objects and arrays.\n\n**Params**\n\n* `object` **{Object}**: The object to check for `value`\n* `value` **{*}**: the value to look for\n* `returns` **{Boolean}**: False if any values exists.\n\n**Example**\n\n```js\nisEmpty('a');\n//=> false\n\nisEmpty('');\n//=> true\n\nisEmpty(1);\n//=> false\n\nisEmpty({a: 'a'});\n//=> false\n\nisEmpty({});\n//=> true\n\nisEmpty(['a']);\n//=> false\n```\n\n### [.isObject](lib/lang/isObject.js#L22)\n\nReturn true if the given `value` is an object with keys.\n\n**Params**\n\n* `value` **{Object}**: The value to check.\n* `returns` **{Boolean}**\n\n**Example**\n\n```js\nisObject(['a', 'b', 'c'])\n//=> 'false'\n\nisObject({a: 'b'})\n//=> 'true'\n```\n\n### [.isPlainObject](lib/lang/isPlainObject.js#L23)\n\nReturn true if the given `value` is an object with keys.\n\n**Params**\n\n* `value` **{Object}**: The value to check.\n* `returns` **{Boolean}**\n\n**Example**\n\n```js\nisPlainObject(Object.create({}));\n//=> true\nisPlainObject(Object.create(Object.prototype));\n//=> true\nisPlainObject({foo: 'bar'});\n//=> true\nisPlainObject({});\n//=> true\n```\n\n### [.sum](lib/math/sum.js#L20)\n\nReturns the sum of all numbers in the given array.\n\n**Params**\n\n* `array` **{Array}**: Array of numbers to add up.\n* `returns` **{Number}**\n\n**Example**\n\n```js\nsum([1, 2, 3, 4, 5])\n//=> '15'\n```\n\n### [.defaults](lib/object/defaults.js#L13)\n\nExtend `object` with properties of other `objects`\n\n**Params**\n\n* `object` **{Object}**: The target object. Pass an empty object to shallow clone.\n* `objects` **{Object}**\n* `returns` **{Object}**\n\n### [.extend](lib/object/extend.js#L16)\n\nExtend `o` with properties of other `objects`.\n\n**Params**\n\n* `o` **{Object}**: The target object. Pass an empty object to shallow clone.\n* `objects` **{Object}**\n* `returns` **{Object}**\n\n### [.functions](lib/object/functions.js#L20)\n\nReturns a copy of the given `obj` filtered to have only enumerable properties that have function values.\n\n**Params**\n\n* `obj` **{Object}**\n* `returns` **{Object}**\n\n**Example**\n\n```js\nfunctions({a: 'b', c: function() {}});\n//=> {c: function() {}}\n```\n\n### [.hasOwn](lib/object/hasOwn.js#L18)\n\nReturn true if `key` is an own, enumerable property of the given `obj`.\n\n**Params**\n\n* `key` **{String}**\n* `obj` **{Object}**: Optionally pass an object to check.\n* `returns` **{Boolean}**\n\n**Example**\n\n```js\nhasOwn(obj, key);\n```\n\n### [.keys](lib/object/keys.js#L15)\n\nReturn an array of keys for the given `obj`. Uses `Object.keys`\nwhen available, otherwise falls back on `forOwn`.\n\n**Params**\n\n* `obj` **{Object}**\n* `returns` **{Array}**: Array of keys.\n\n### [mapValues](lib/object/mapValues.js#L17)\n\nReturns new object where each value is the result of\ncalling the a `callback` function.\n\n**Params**\n\n* **{Object}**: obj The object to iterate over\n* `cb` **{Function}**: Callback function\n* **{Object}**: thisArg Invocation context of `cb`\n* `returns` **{Object}**\n\n### [.merge](lib/object/merge.js#L23)\n\nRecursively combine the properties of `o` with the\nproperties of other `objects`.\n\n**Params**\n\n* `o` **{Object}**: The target object. Pass an empty object to shallow clone.\n* `objects` **{Object}**\n* `returns` **{Object}**\n\n### [.methods](lib/object/methods.js#L15)\n\nReturns a list of all enumerable properties of `obj` that have function\nvalues\n\n**Params**\n\n* `obj` **{Object}**\n* `returns` **{Array}**\n\n### [.reduce](lib/object/reduce.js#L32)\n\nReduces an object to a value that is the accumulated result of running each property in the object through a callback.\n\n**Params**\n\n* `obj` **{Object}**: The object to iterate over.\n* `iterator` **{Function}**: Iterator function\n* `initial` **{Object}**: Initial value.\n* `thisArg` **{Object}**: The `this` binding of the iterator function.\n* `returns` **{Object}**\n\n**Example**\n\n```js\nvar a = {a: 'foo', b: 'bar', c: 'baz'};\n\nreduce(a, function (acc, value, key, obj) {\n  // `acc`- the initial value (or value from the previous callback call),\n  // `value`- the of the current property,\n  // `key`- the of the current property, and\n  // `obj` - original object\n\n  acc[key] = value.toUpperCase();\n  return acc;\n}, {});\n\n//=> {a: 'FOO', b: 'BAR', c: 'BAZ'};\n```\n\n### [.camelcase](lib/string/camelcase.js#L20)\n\ncamelCase the characters in `string`.\n\n**Params**\n\n* `string` **{String}**: The string to camelcase.\n* `returns` **{String}**\n\n**Example**\n\n```js\ncamelcase(\"foo bar baz\");\n//=> 'fooBarBaz'\n```\n\n### [.centerAlign](lib/string/centerAlign.js#L21)\n\nCenter align the characters in a string using non-breaking spaces.\n\n**Params**\n\n* `str` **{String}**: The string to reverse.\n* `returns` **{String}**: Centered string.\n\n**Example**\n\n```js\ncenterAlign(\"abc\");\n```\n\n### [.chop](lib/string/chop.js#L26)\n\nLike trim, but removes both extraneous whitespace and non-word characters from the beginning and end of a string.\n\n**Params**\n\n* `string` **{String}**: The string to chop.\n* `returns` **{String}**\n\n**Example**\n\n```js\nchop(\"_ABC_\");\n//=> 'ABC'\n\nchop(\"-ABC-\");\n//=> 'ABC'\n\nchop(\" ABC \");\n//=> 'ABC'\n```\n\n### [.count](lib/string/count.js#L21)\n\nCount the number of occurrances of a substring within a string.\n\n**Params**\n\n* `string` **{String}**\n* `substring` **{String}**\n* `returns` **{Number}**: The occurances of `substring` in `string`\n\n**Example**\n\n```js\ncount(\"abcabcabc\", \"a\");\n//=> '3'\n```\n\n### [.dashcase](lib/string/dashcase.js#L22)\n\ndash-case the characters in `string`. This is similar to [slugify], but [slugify] makes the string compatible to be used as a URL slug.\n\n**Params**\n\n* `string` **{String}**\n* `returns` **{String}**\n\n**Example**\n\n```js\ndashcase(\"a b.c d_e\");\n//=> 'a-b-c-d-e'\n```\n\n### [.dotcase](lib/string/dotcase.js#L20)\n\ndot.case the characters in `string`.\n\n**Params**\n\n* `string` **{String}**\n* `returns` **{String}**\n\n**Example**\n\n```js\ndotcase(\"a-b-c d_e\");\n//=> 'a.b.c.d.e'\n```\n\n### [.ellipsis](lib/string/ellipsis.js#L23)\n\nTruncate a string to the specified `length`, and append it with an elipsis, `…`.\n\n**Params**\n\n* `str` **{String}**\n* `length` **{Number}**: The desired length of the returned string.\n* `ch` **{String}**: Optionally pass custom characters to append. Default is `…`.\n* `returns` **{String}**: The truncated string.\n\n**Example**\n\n```js\nellipsis(\"<span>foo bar baz</span>\", 7);\n//=> 'foo bar…'\n```\n\n### [.hyphenate](lib/string/hyphenate.js#L20)\n\nReplace spaces in a string with hyphens. This\n\n**Params**\n\n* `string` **{String}**\n* `returns` **{String}**\n\n**Example**\n\n```js\nhyphenate(\"a b c\");\n//=> 'a-b-c'\n```\n\n### [.isString](lib/string/isString.js#L20)\n\nReturns true if the value is a string.\n\n**Params**\n\n* `val` **{String}**\n* `returns` **{Boolean}**: True if the value is a string.\n\n**Example**\n\n```js\nisString('abc');\n//=> 'true'\n\nisString(null);\n//=> 'false'\n```\n\n### [.pascalcase](lib/string/pascalcase.js#L20)\n\nPascalCase the characters in `string`.\n\n**Params**\n\n* `string` **{String}**\n* `returns` **{String}**\n\n**Example**\n\n```js\npascalcase(\"foo bar baz\");\n//=> 'FooBarBaz'\n```\n\n### [.pathcase](lib/string/pathcase.js#L20)\n\npath/case the characters in `string`.\n\n**Params**\n\n* `string` **{String}**\n* `returns` **{String}**\n\n**Example**\n\n```js\npathcase(\"a-b-c d_e\");\n//=> 'a/b/c/d/e'\n```\n\n### [.replace](lib/string/replace.js#L21)\n\nReplace occurrences of `a` with `b`.\n\n**Params**\n\n* `str` **{String}**\n* `a` **{String|RegExp}**: Can be a string or regexp.\n* `b` **{String}**\n* `returns` **{String}**\n\n**Example**\n\n```js\nreplace(\"abcabc\", /a/, \"z\");\n//=> 'zbczbc'\n```\n\n### [.reverse](lib/string/reverse.js#L19)\n\nReverse the characters in a string.\n\n**Params**\n\n* `str` **{String}**: The string to reverse.\n* `returns` **{String}**\n\n**Example**\n\n```js\nreverse(\"abc\");\n//=> 'cba'\n```\n\n### [.rightAlign](lib/string/rightAlign.js#L21)\n\nRight align the characters in a string using non-breaking spaces.\n\n**Params**\n\n* `str` **{String}**: The string to reverse.\n* `returns` **{String}**: Right-aligned string.\n\n**Example**\n\n```js\nrightAlign(str);\n```\n\n### [.sentencecase](lib/string/sentencecase.js#L19)\n\nSentence-case the characters in `string`.\n\n**Params**\n\n* `string` **{String}**\n* `returns` **{String}**\n\n**Example**\n\n```js\nsentencecase(\"foo bar baz.\");\n//=> 'Foo bar baz.'\n```\n\n### [.snakecase](lib/string/snakecase.js#L20)\n\nsnake_case the characters in `string`.\n\n**Params**\n\n* `string` **{String}**\n* `returns` **{String}**\n\n**Example**\n\n```js\nsnakecase(\"a-b-c d_e\");\n//=> 'a_b_c_d_e'\n```\n\n### [.truncate](lib/string/truncate.js#L22)\n\nTruncate a string by removing all HTML tags and limiting the result to the specified `length`.\n\n**Params**\n\n* `str` **{String}**\n* `length` **{Number}**: The desired length of the returned string.\n* `returns` **{String}**: The truncated string.\n\n**Example**\n\n```js\ntruncate(\"<span>foo bar baz</span>\", 7);\n//=> 'foo bar'\n```\n\n### [.wordwrap](lib/string/wordwrap.js#L21)\n\nWrap words to a specified width using [word-wrap].\n\n**Params**\n\n* `string` **{String}**: The string with words to wrap.\n* `object` **{Options}**: Options to pass to [word-wrap]\n* `returns` **{String}**: Formatted string.\n\n**Example**\n\n```js\nwordwrap(\"a b c d e f\", {width: 5, newline: '<br>  '});\n//=> '  a b c <br>  d e f'\n```\n\n## Code coverage\n\nPlease help improve code coverage by [adding unit tests](#contributing).\n\n```\n-----------------------|----------|----------|----------|----------|----------------|\nFile                   |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |\n-----------------------|----------|----------|----------|----------|----------------|\n utils/                |      100 |      100 |      100 |      100 |                |\n  index.js             |      100 |      100 |      100 |      100 |                |\n utils/lib/            |      100 |      100 |      100 |      100 |                |\n  index.js             |      100 |      100 |      100 |      100 |                |\n utils/lib/array/      |    91.75 |    83.33 |      100 |    92.55 |                |\n  after.js             |      100 |       75 |      100 |      100 |                |\n  arrayify.js          |      100 |      100 |      100 |      100 |                |\n  before.js            |      100 |       75 |      100 |      100 |                |\n  compact.js           |      100 |      100 |      100 |      100 |                |\n  difference.js        |      100 |      100 |      100 |      100 |                |\n  each.js              |      100 |      100 |      100 |      100 |                |\n  first.js             |    88.89 |    83.33 |      100 |    88.24 |          27,46 |\n  flatten.js           |      100 |      100 |      100 |      100 |                |\n  forEach.js           |      100 |      100 |      100 |      100 |                |\n  index.js             |      100 |      100 |      100 |      100 |                |\n  indexOf.js           |    76.92 |       70 |      100 |    83.33 |          23,40 |\n  isArray.js           |      100 |      100 |      100 |      100 |                |\n  last.js              |    88.89 |    83.33 |      100 |    88.24 |          27,46 |\n  map.js               |      100 |      100 |      100 |      100 |                |\n  slice.js             |      100 |      100 |      100 |      100 |                |\n  sort.js              |    90.91 |     87.5 |      100 |    90.91 |             27 |\n  union.js             |      100 |      100 |      100 |      100 |                |\n  unique.js            |      100 |      100 |      100 |      100 |                |\n utils/lib/collection/ |    55.56 |        0 |        0 |    55.56 |                |\n  any.js               |      100 |      100 |      100 |      100 |                |\n  contains.js          |    42.86 |        0 |        0 |    42.86 |    18,19,21,22 |\n  index.js             |      100 |      100 |      100 |      100 |                |\n utils/lib/fs/         |    68.75 |      100 |    66.67 |    68.75 |                |\n  index.js             |      100 |      100 |      100 |      100 |                |\n  tryRead.js           |       40 |      100 |        0 |       40 |       16,17,19 |\n  tryReaddir.js        |       80 |      100 |      100 |       80 |             20 |\n  tryRequire.js        |       80 |      100 |      100 |       80 |             19 |\n utils/lib/function/   |    36.36 |        0 |        0 |    36.36 |                |\n  identity.js          |       50 |      100 |        0 |       50 |             12 |\n  index.js             |      100 |      100 |      100 |      100 |                |\n  noop.js              |       50 |      100 |        0 |       50 |             13 |\n  partialRight.js      |    16.67 |        0 |        0 |    16.67 | 26,27,28,29,30 |\n utils/lib/lang/       |      100 |      100 |      100 |      100 |                |\n  hasValues.js         |      100 |      100 |      100 |      100 |                |\n  index.js             |      100 |      100 |      100 |      100 |                |\n  isEmpty.js           |      100 |      100 |      100 |      100 |                |\n  isObject.js          |      100 |      100 |      100 |      100 |                |\n  isPlainObject.js     |      100 |      100 |      100 |      100 |                |\n  typeOf.js            |      100 |      100 |      100 |      100 |                |\n utils/lib/math/       |      100 |      100 |      100 |      100 |                |\n  index.js             |      100 |      100 |      100 |      100 |                |\n  sum.js               |      100 |      100 |      100 |      100 |                |\n utils/lib/object/     |    62.77 |    46.15 |    17.65 |    61.96 |                |\n  defaults.js          |      100 |      100 |      100 |      100 |                |\n  extend.js            |      100 |    83.33 |      100 |      100 |                |\n  filter.js            |      100 |      100 |      100 |      100 |                |\n  forIn.js             |      100 |      100 |      100 |      100 |                |\n  forOwn.js            |      100 |      100 |      100 |      100 |                |\n  functions.js         |    28.57 |        0 |        0 |    28.57 | 21,23,24,25,29 |\n  hasOwn.js            |      100 |      100 |      100 |      100 |                |\n  index.js             |      100 |      100 |      100 |      100 |                |\n  keys.js              |    33.33 |       50 |        0 |    33.33 |    16,17,18,20 |\n  mapValues.js         |     37.5 |      100 |        0 |     37.5 | 18,19,21,22,25 |\n  merge.js             |      100 |       75 |      100 |      100 |                |\n  methods.js           |    28.57 |        0 |        0 |    28.57 | 16,18,19,20,24 |\n  omit.js              |      100 |      100 |      100 |      100 |                |\n  pick.js              |      100 |      100 |      100 |      100 |                |\n  pluck.js             |       75 |      100 |        0 |       75 |             17 |\n  prop.js              |    33.33 |      100 |        0 |    33.33 |            4,5 |\n  reduce.js            |      100 |      100 |      100 |      100 |                |\n  result.js            |       25 |        0 |        0 |       25 | 6,7,8,10,11,13 |\n  some.js              |       30 |        0 |        0 |       30 |... 11,12,13,16 |\n utils/lib/string/     |    99.28 |    96.77 |       96 |     99.1 |                |\n  camelcase.js         |      100 |      100 |      100 |      100 |                |\n  centerAlign.js       |      100 |      100 |      100 |      100 |                |\n  chop.js              |      100 |      100 |      100 |      100 |                |\n  count.js             |      100 |      100 |      100 |      100 |                |\n  dashcase.js          |      100 |      100 |      100 |      100 |                |\n  dotcase.js           |      100 |      100 |      100 |      100 |                |\n  ellipsis.js          |      100 |      100 |      100 |      100 |                |\n  hyphenate.js         |      100 |      100 |      100 |      100 |                |\n  index.js             |      100 |      100 |      100 |      100 |                |\n  isString.js          |      100 |      100 |      100 |      100 |                |\n  pascalcase.js        |      100 |      100 |      100 |      100 |                |\n  pathcase.js          |      100 |      100 |      100 |      100 |                |\n  replace.js           |      100 |      100 |      100 |      100 |                |\n  reverse.js           |      100 |      100 |      100 |      100 |                |\n  rightAlign.js        |      100 |      100 |      100 |      100 |                |\n  sentencecase.js      |      100 |      100 |      100 |      100 |                |\n  slugify.js           |      100 |      100 |      100 |      100 |                |\n  snakecase.js         |      100 |      100 |      100 |      100 |                |\n  toString.js          |       50 |        0 |        0 |       50 |             10 |\n  truncate.js          |      100 |      100 |      100 |      100 |                |\n  wordwrap.js          |      100 |      100 |      100 |      100 |                |\n-----------------------|----------|----------|----------|----------|----------------|\nAll files              |    84.54 |    80.52 |    67.16 |    83.43 |                |\n-----------------------|----------|----------|----------|----------|----------------|\n```\n\n## Running tests\n\nInstall dev dependencies:\n\n```sh\n$ npm i -d && npm test\n```\n\n## Contributing\n\n> Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/utils/issues/new).\n\n### Adding utils\n\nIf you want to do a PR to add a util, please read the following first:\n\n* follow the same coding style as the rest of the library, same with code comments\n* add sufficient unit tests\n* Install dev dependencies and [run verb](#running-verb)\n* Look over the README to make sure that verb rendered out the docs with your method and code comments.\n\n**Adding external modules as dependencies**\n\n* External modules will only be considered if they meet the same quality and coding standards as the rest of the library. At minimum this includes documentation, code comments, and unit tests. Benchmarks are also strongly preferred.\n\n### Updating the docs\n\nDo not edit the readme manually since [verb](https://github.com/verbose/verb)is used to generate documentation.\n\n* API docs: If you see an error in the API documentation, just update the code comments for that method, then [run verb](#running-verb).\n* Everything else, please look over the [.verb.md](./.verb.md) template to see where the error is, then [run verb](#running-verb).\n\n### Running verb\n\nInstall dev dependencies, then run [verb](https://github.com/verbose/verb):\n\n```js\n$ npm install -d && verb\n```\n\n## About\n\n**Why another utils lib?**\n\n* I'm a node.js developer. I want fast, light, dependable utility functions for node.js projects.\n* Do you really need bloated, everything-but-the-kitchen-sink functions that are guaranteed to work with IE 4, **for your Yeoman generator or gulp plugin**!? Nonsense.\n* The benchmarks that accompany many of the functions in the library show that in some cases, the penalty for using such \"kitchen-sink\" code is a 2,000-5,000% reduction in speed. Sometimes greater.\n\n**Project goals**\n\n* Fastest implementation of each method, without too much compromise. Covering uncommon cases is fine, but don't go overboard.\n* Clean well-documented, commented code.\n* [When it makes sense](#adding-utils), external libraries are used and exposed instead of writing new code.\n* Focus on node.js usage and projects that are likely to use a number of these utils in one project. If you only need one or two of these in a small project, don't use this. Use small modules that do only one thing.\n\n## Related projects\n\n> This project depends on these great libraries. If you don't need a full utility belt for your project, any of these can be used by themselves:\n\n* [any](https://www.npmjs.com/package/any): Returns `true` if a value exists in the given string, array or object. | [homepage](https://github.com/jonschlinkert/any)\n* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://www.npmjs.com/package/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff)\n* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten)\n* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map)\n* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://www.npmjs.com/package/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union)\n* [array-each](https://www.npmjs.com/package/array-each): Loop over each item in an array and call the given function on every element. | [homepage](https://github.com/jonschlinkert/array-each)\n* [array-slice](https://www.npmjs.com/package/array-slice): Array-slice method. Slices `array` from the `start` index up to, but not including, the `end`… [more](https://www.npmjs.com/package/array-slice) | [homepage](https://github.com/jonschlinkert/array-slice)\n* [array-unique](https://www.npmjs.com/package/array-unique): Return an array free of duplicate values. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique)\n* [center-align](https://www.npmjs.com/package/center-align): Center-align the text in a string. | [homepage](https://github.com/jonschlinkert/center-align)\n* [export-dirs](https://www.npmjs.com/package/export-dirs): Export directories and their files as node.js modules. | [homepage](https://github.com/jonschlinkert/export-dirs)\n* [export-files](https://www.npmjs.com/package/export-files): node.js utility for exporting a directory of files as modules. | [homepage](https://github.com/jonschlinkert/export-files)\n* [for-in](https://www.npmjs.com/package/for-in): Iterate over the own and inherited enumerable properties of an objecte, and return an object… [more](https://www.npmjs.com/package/for-in) | [homepage](https://github.com/jonschlinkert/for-in)\n* [for-own](https://www.npmjs.com/package/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://www.npmjs.com/package/for-own) | [homepage](https://github.com/jonschlinkert/for-own)\n* [has-values](https://www.npmjs.com/package/has-values): Returns true if any values exist, false if empty. Works for booleans, functions, numbers, strings,… [more](https://www.npmjs.com/package/has-values) | [homepage](https://github.com/jonschlinkert/has-values)\n* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number)\n* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object)\n* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of)\n* [make-iterator](https://www.npmjs.com/package/make-iterator): Convert an argument into a valid iterator. Based on the `.makeIterator()` implementation in mout https://github.com/mout/mout. | [homepage](https://github.com/jonschlinkert/make-iterator)\n* [object.defaults](https://www.npmjs.com/package/object.defaults): Like `extend` but only copies missing properties/values to the target object. | [homepage](https://github.com/jonschlinkert/object.defaults)\n* [object.filter](https://www.npmjs.com/package/object.filter): Create a new object filtered to have only properties for which the callback returns true. | [homepage](https://github.com/jonschlinkert/object.filter)\n* [object.omit](https://www.npmjs.com/package/object.omit): Return a copy of an object excluding the given key, or array of keys. Also… [more](https://www.npmjs.com/package/object.omit) | [homepage](https://github.com/jonschlinkert/object.omit)\n* [object.pick](https://www.npmjs.com/package/object.pick): Returns a filtered copy of an object with only the specified keys, like `pick` from… [more](https://www.npmjs.com/package/object.pick) | [homepage](https://github.com/jonschlinkert/object.pick)\n* [object.reduce](https://www.npmjs.com/package/object.reduce): Reduces an object to a value that is the accumulated result of running each property… [more](https://www.npmjs.com/package/object.reduce) | [homepage](https://github.com/jonschlinkert/object.reduce)\n* [right-align](https://www.npmjs.com/package/right-align): Right-align the text in a string. | [homepage](https://github.com/jonschlinkert/right-align)\n* [striptags](https://www.npmjs.com/package/striptags): PHP strip_tags in Node.js | [homepage](https://github.com/ericnorris/striptags)\n* [word-wrap](https://www.npmjs.com/package/word-wrap): Wrap words to a specified length. | [homepage](https://github.com/jonschlinkert/word-wrap)\n\n## Author\n\n**Jon Schlinkert**\n\n+ [github/jonschlinkert](https://github.com/jonschlinkert)\n+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)\n\n## License\n\nCopyright © 2015 Jon Schlinkert\nReleased under the MIT license.\n\n***\n\n_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on September 23, 2015._","_attachments":{},"homepage":"https://github.com/jonschlinkert/utils","bugs":{"url":"https://github.com/jonschlinkert/utils/issues"},"license":"MIT"}