diff options
Diffstat (limited to 'node_modules/es5-ext/array/#/exclusion.js')
-rw-r--r-- | node_modules/es5-ext/array/#/exclusion.js | 31 |
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; +}; |