code: function copyFilteredNot(src, excludeFilter, thisArg = undefined) {
      let result = null;
  
      if (isObjectLike(src) && (src.constructor === Object || src.constructor === Array)) {
          const dst = this;
          const testFunc = resolveTestFunc(excludeFilter, objectHasOwnPropertyKey, arrayContainsKey, null, alwaysTrue, isEqualTo);
          if (!isFunction(excludeFilter)) thisArg = excludeFilter;
  
          eachProp.call(src, (value, key, arg) => {
              if (value !== UNDEFINED) {
                  const testResult = testFunc.call(thisArg, value, key, arg);
                  if (testResult === BREAK) return BREAK;
                  if (!testResult) {
                      if (!result) result = dst || {};
                      result[key] = value;
                  }
              }
          }, thisArg);
      }
      return result;
  }
docs: copy properties from source, optionally filter by inverse condition
  NOTE: properties whose value is undefined are never copied
  
  @this            destination object/array for copied properties, if tests false, then new
  object will be used
  @param src       source object/array whose properties to filter
  @param excludeFilter {*}
  - function (value, key, src) returning testing true to not copy property,
  returning BREAK will exit loop, returned BREAK value ignored
  - object with properties to be not copied
  - array containing properties to not copy,
  - anything else will copy if value of property compares with != as true
  @param thisArg  what to use as this for the function call, or undefined, ignored if
  excludeFilter is not a function
  @return {*}      null if no properties were copied, otherwise destination object (this or
  new if this was undefined)