123456789101112131415161718192021222324252627 |
- '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;
- };
|