23 Oct 2015

How to find the difference between arrays

Returns an array of unique values that is the symmetric difference of the provided arrays.

function arrayDifference(/* arrays */) {
  var arrays = [].slice.call(arguments);
  var complement = [];

  for (var i = 0; i < arrays.length; i++) {
    var array = arrays[i];

    if (Array.isArray(array)) {
      for (var j = 0; j < array.length; j++) {
        var value = array[j];
        var atIndex = complement.indexOf(value);

        if (atIndex === -1) {
          complement.push(value);
        } else {
          complement.splice(atIndex, 1);
        }
      }
    }
  }

  return complement;
}

Usage

console.log(arrayDifference(['foo','bar'], ['bar'])); // ['foo']
console.log(arrayDifference(['foo','bar','qux'],['qux','baz'],['thud','norf','bar'])); // ['foo','baz','thud','norf']

On github at miguelmota/array-complement.