summaryrefslogtreecommitdiff
path: root/tools/eslint/node_modules/escope/node_modules/es6-weak-map/node_modules/es5-ext/array/#/exclusion.js
blob: f08adc81c9631e6e4143ff6a1ab12beb6f08a9f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
'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;
};