function recursiveFn(source, target, key) {
    if (isArray(source) || isObject(source)) {
      target = isPrimitive(target) ? isObject(source) ? {} : [] : target;
      for (var _key in source) {
        // $FlowFixMe: support computed key here
        setter(target, _key, recursiveFn(source[_key], target[_key], _key));
        // target[key] = recursiveFn(source[key], target[key], key);
      }
      return target;
    }
    return fn(source, target, key);
  }
function recursiveFn(source, target, key) {
    if (isArray(source) || isObject(source)) {
      target = isPrimitive(target) ? isObject(source) ? {} : [] : target;
      for (var _key in source) {
        
        setter(target, _key, recursiveFn(source[_key], target[_key], _key));
        
      }
      return target;
    }
    return fn(source, target, key);
  }
function recursiveFn ( source , target , key ) { if ( isArray ( source ) || isObject ( source ) ) { target = isPrimitive ( target ) ? isObject ( source ) ? { } : [ ] : target ; for ( var _key in source ) { // $FlowFixMe: support computed key here setter ( target , _key , recursiveFn ( source [ _key ] , target [ _key ] , _key ) ) ; // target[key] = recursiveFn(source[key], target[key], key); } return target ; } return fn ( source , target , key ) ; }
use recursive to move what in source to the target if you do not provide a target, we will create a new target
use recursive to move what in source to the target if you do not provide a target we will create a new target