aboutsummaryrefslogtreecommitdiff
path: root/node_modules/es5-ext/array/#/exclusion.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/es5-ext/array/#/exclusion.js')
-rw-r--r--node_modules/es5-ext/array/#/exclusion.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/node_modules/es5-ext/array/#/exclusion.js b/node_modules/es5-ext/array/#/exclusion.js
new file mode 100644
index 000000000..41057d06f
--- /dev/null
+++ b/node_modules/es5-ext/array/#/exclusion.js
@@ -0,0 +1,31 @@
+"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;
+};