20 lines
		
	
	
		
			570 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
		
			570 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| var aFrom  = require("../array/from")
 | |
|   , assign = require("./assign")
 | |
|   , value  = require("./valid-value");
 | |
| 
 | |
| module.exports = function (obj/*, propertyNames, options*/) {
 | |
| 	var copy = Object(value(obj)), propertyNames = arguments[1], options = Object(arguments[2]);
 | |
| 	if (copy !== obj && !propertyNames) return copy;
 | |
| 	var result = {};
 | |
| 	if (propertyNames) {
 | |
| 		aFrom(propertyNames, function (propertyName) {
 | |
| 			if (options.ensure || propertyName in obj) result[propertyName] = obj[propertyName];
 | |
| 		});
 | |
| 	} else {
 | |
| 		assign(result, obj);
 | |
| 	}
 | |
| 	return result;
 | |
| };
 |