artdaq_node_server  v1_00_09
 All Classes Namespaces Files Variables Pages
_baseDifference.js
1 var SetCache = require('./_SetCache'),
2  arrayIncludes = require('./_arrayIncludes'),
3  arrayIncludesWith = require('./_arrayIncludesWith'),
4  arrayMap = require('./_arrayMap'),
5  baseUnary = require('./_baseUnary'),
6  cacheHas = require('./_cacheHas');
7 
9 var LARGE_ARRAY_SIZE = 200;
10 
22 function baseDifference(array, values, iteratee, comparator) {
23  var index = -1,
24  includes = arrayIncludes,
25  isCommon = true,
26  length = array.length,
27  result = [],
28  valuesLength = values.length;
29 
30  if (!length) {
31  return result;
32  }
33  if (iteratee) {
34  values = arrayMap(values, baseUnary(iteratee));
35  }
36  if (comparator) {
37  includes = arrayIncludesWith;
38  isCommon = false;
39  }
40  else if (values.length >= LARGE_ARRAY_SIZE) {
41  includes = cacheHas;
42  isCommon = false;
43  values = new SetCache(values);
44  }
45  outer:
46  while (++index < length) {
47  var value = array[index],
48  computed = iteratee == null ? value : iteratee(value);
49 
50  value = (comparator || value !== 0) ? value : 0;
51  if (isCommon && computed === computed) {
52  var valuesIndex = valuesLength;
53  while (valuesIndex--) {
54  if (values[valuesIndex] === computed) {
55  continue outer;
56  }
57  }
58  result.push(value);
59  }
60  else if (!includes(values, computed, comparator)) {
61  result.push(value);
62  }
63  }
64  return result;
65 }
66 
67 module.exports = baseDifference;