2.0.0 • Published 8 years ago

array-subtract v2.0.0

Weekly downloads
124
License
MIT
Repository
github
Last release
8 years ago

array-subtract-functional-compare

Build Status Code Climate Test Coverage Dependency Status devDependency Status

js-standard-style NPM

Compute the difference between two arrays with an optional custom equality comparison method.

Inspired by Ruby's built in Array Difference: Ruby Docs: Array-Difference

array-subtract-functional-compare is slightly different from the NPM package array-difference. This module will subtract one array from another array, and return a new array with a subset of the values in the first array. array-difference computes the symmetric difference (XOR) of two arrays.

Symmetric Difference vs Array Subtraction

A: [1, 2, 3, 4, 5]
B: [3, 4, 5, 6, 7]

Symmetric difference: A XOR B = [1, 2, 6, 7]
Array subtraction: A - B = [1, 2]
// In Ruby the subtraction operator is overloaded to work with arrays
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5] - [1, 3, 4]
// => [2, 2, 5, 5, 5, 5, 5]

// Equivalent operation in JavaScript using array-subtract
var Subtract = require('array-subtract')
var subtract = new Subtract((a, b) => { return a === b })
subtract.sub([1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5], [1, 3, 4])
// => [2, 2, 5, 5, 5, 5, 5]

Usage

var namesA = [{
  name: 'David'
}, {
  name: 'Jessica'
}, {
  name: 'Sam'
}, {
  name: 'Jessica'
}]

var namesB = [{
  name: 'Sam'
}, {
  name: 'Tim'
}]

var Subtract = require('array-subtract')
/**
 * Arguments of comparator function passed to new Subtract()
 *
 * @param {*} itemA - Any element of an array argument passed to subtract.sub
 * @param {*} itemB - Any element of an array argument passed to subtract.sub
 */
var subtract = new Subtract((itemA, itemB) => { return itemA.name === itemB.name })

// namesA - namesB
var namesC = subtract.sub(namesA, namesB)
// => [{ name: 'David' }, { name: 'Jessica' }, { name: 'Jessica' }]

Testing

# Run using Node v4.0.0 or higher
$ npm run test
$ npm run html-test-cov # Will generate HTML coverage report and attempt to auto-open Chrome (OSX)

License

MIT