function pluck( arr, prop, options ) {
	var opts;
	var out;
	var err;
	var v;
	var i;

	if ( !isArray( arr ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be an array. Value: `%s`.', arr ) );
	}
	opts = defaults();
	if ( arguments.length > 2 ) {
		err = validate( opts, options );
		if ( err ) {
			throw err;
		}
	}
	if ( opts.copy ) {
		out = new Array( arr.length );
	} else {
		out = arr;
	}
	for ( i = 0; i < arr.length; i++ ) {
		v = arr[ i ];
		if (
			v !== void 0 &&
			v !== null &&
			hasOwnProp( v, prop )
		) {
			out[ i ] = v[ prop ];
		}
	}
	return out;
}
Extracts a property value from each element of an object array.

@param {Array} arr - source array
@param {*} prop - property to access
@param {Options} [options] - function options
@param {boolean} [options.copy=true] - boolean indicating whether to return a new data structure
@throws {TypeError} first argument must be an object array
@throws {TypeError} options argument must be an object
@throws {TypeError} must provide valid options
@returns {Array} destination array

@example
var arr = [
    { 'a': 1, 'b': 2 },
    { 'a': 0.5, 'b': 3 }
];

var out = pluck( arr, 'a' );
// returns [ 1, 0.5 ]

@example
var arr = [
    { 'a': 1, 'b': 2 },
    { 'a': 0.5, 'b': 3 }
];

var out = pluck( arr, 'a', {'copy':false} );
// returns [ 1, 0.5 ]

var bool = ( arr[ 0 ] === out[ 0 ] );
// returns true