code: function mergeOne(dst, src) {
      if (src === _undefined) return dst;
  
      // According to specification arrays must be concatenated.
      // Also, the '.concat' creates a new array instance. Overrides the 'dst'.
      if (isArray(src)) return (isArray(dst) ? dst : []).concat(src);
  
      // Now deal with non plain 'src' object. 'src' overrides 'dst'
      // Note that functions are also assigned! We do not deep merge functions.
      if (!isPlainObject(src)) return src;
  
      var keys = objectKeys(src), i = 0, key;
      for (; i < keys[_length];) {
        key = keys[i++];
  
        // Do not merge properties with the '_undefined' value.
        if (src[key] !== _undefined) {
          // deep merge each property. Recursion!
          dst[key] = mergeOne(
            // Recursive calls to mergeOne() must allow only plain objects or arrays in dst
            isPlainObject(dst[key]) || isArray(src[key]) ? dst[key] : {},
            src[key]
          );
        }
      }
  
      return dst;
    }
docs: The 'src' argument plays the command role.
  The returned values is always of the same type as the 'src'.
  @param {Array|Object|*} dst Destination
  @param {Array|Object|*} src Source
  @returns {Array|Object|*} The `dst` argument