var assignValue = require('./_assignValue'),

baseAssignValue = require('./_baseAssignValue');

/**

* Copies properties of `source` to `object`.
*
* @private
* @param {Object} source The object to copy properties from.
* @param {Array} props The property identifiers to copy.
* @param {Object} [object={}] The object to copy properties to.
* @param {Function} [customizer] The function to customize copied values.
* @returns {Object} Returns `object`.
*/

function copyObject(source, props, object, customizer) {

var isNew = !object;
object || (object = {});

var index = -1,
    length = props.length;

while (++index < length) {
  var key = props[index];

  var newValue = customizer
    ? customizer(object[key], source[key], key, object, source)
    : undefined;

  if (newValue === undefined) {
    newValue = source[key];
  }
  if (isNew) {
    baseAssignValue(object, key, newValue);
  } else {
    assignValue(object, key, newValue);
  }
}
return object;

}

module.exports = copyObject;