'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 (x) { return !contains.call(seen, x); })); push.apply(seen, toArray(list)); }); return result; };