time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

_baseXor.js (1099B)


      1 var baseDifference = require('./_baseDifference'),
      2     baseFlatten = require('./_baseFlatten'),
      3     baseUniq = require('./_baseUniq');
      4 
      5 /**
      6  * The base implementation of methods like `_.xor`, without support for
      7  * iteratee shorthands, that accepts an array of arrays to inspect.
      8  *
      9  * @private
     10  * @param {Array} arrays The arrays to inspect.
     11  * @param {Function} [iteratee] The iteratee invoked per element.
     12  * @param {Function} [comparator] The comparator invoked per element.
     13  * @returns {Array} Returns the new array of values.
     14  */
     15 function baseXor(arrays, iteratee, comparator) {
     16   var length = arrays.length;
     17   if (length < 2) {
     18     return length ? baseUniq(arrays[0]) : [];
     19   }
     20   var index = -1,
     21       result = Array(length);
     22 
     23   while (++index < length) {
     24     var array = arrays[index],
     25         othIndex = -1;
     26 
     27     while (++othIndex < length) {
     28       if (othIndex != index) {
     29         result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
     30       }
     31     }
     32   }
     33   return baseUniq(baseFlatten(result, 1), iteratee, comparator);
     34 }
     35 
     36 module.exports = baseXor;