26 lines
		
	
	
		
			782 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			782 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| var value    = require("../../object/valid-value")
 | |
|   , aFrom    = require("../from")
 | |
|   , toArray  = require("../to-array")
 | |
|   , contains = require("./contains")
 | |
|   , byLength = require("./_compare-by-length")
 | |
|   , filter   = Array.prototype.filter
 | |
|   , push     = Array.prototype.push;
 | |
| 
 | |
| module.exports = function (/* …lists*/) {
 | |
| 	var lists, seen, result;
 | |
| 	if (!arguments.length) return aFrom(this);
 | |
| 	push.apply((lists = [this]), arguments);
 | |
| 	lists.forEach(value);
 | |
| 	seen = [];
 | |
| 	result = [];
 | |
| 	lists.sort(byLength).forEach(function (list) {
 | |
| 		result = result
 | |
| 			.filter(function (item) { return !contains.call(list, item); })
 | |
| 			.concat(filter.call(list, function (item) { return !contains.call(seen, item); }));
 | |
| 		push.apply(seen, toArray(list));
 | |
| 	});
 | |
| 	return result;
 | |
| };
 |