123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- import _curry2 from "./internal/_curry2.js";
- import _Set from "./internal/_Set.js";
- /**
- * Finds the set (i.e. no duplicates) of all elements in the first list not
- * contained in the second list. Objects and Arrays are compared in terms of
- * value equality, not reference equality.
- *
- * @func
- * @memberOf R
- * @since v0.1.0
- * @category Relation
- * @sig [*] -> [*] -> [*]
- * @param {Array} list1 The first list.
- * @param {Array} list2 The second list.
- * @return {Array} The elements in `list1` that are not in `list2`.
- * @see R.differenceWith, R.symmetricDifference, R.symmetricDifferenceWith, R.without
- * @example
- *
- * R.difference([1,2,3,4], [7,6,5,4,3]); //=> [1,2]
- * R.difference([7,6,5,4,3], [1,2,3,4]); //=> [7,6,5]
- * R.difference([{a: 1}, {b: 2}], [{a: 1}, {c: 3}]) //=> [{b: 2}]
- */
- var difference =
- /*#__PURE__*/
- _curry2(function difference(first, second) {
- var out = [];
- var idx = 0;
- var firstLen = first.length;
- var secondLen = second.length;
- var toFilterOut = new _Set();
- for (var i = 0; i < secondLen; i += 1) {
- toFilterOut.add(second[i]);
- }
- while (idx < firstLen) {
- if (toFilterOut.add(first[idx])) {
- out[out.length] = first[idx];
- }
- idx += 1;
- }
- return out;
- });
- export default difference;
|