index.js 1016 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. module.exports = intersect;
  2. function many (sets) {
  3. var o = {};
  4. var l = sets.length - 1;
  5. var first = sets[0];
  6. var last = sets[l];
  7. for(var i in first) o[first[i]] = 0;
  8. for(var i = 1; i <= l; i++) {
  9. var row = sets[i];
  10. for(var j in row) {
  11. var key = row[j];
  12. if(o[key] === i - 1) o[key] = i;
  13. }
  14. }
  15. var a = [];
  16. for(var i in last) {
  17. var key = last[i];
  18. if(o[key] === l) a.push(key);
  19. }
  20. return a;
  21. }
  22. function intersect (a, b) {
  23. if (!b) return many(a);
  24. var res = [];
  25. for (var i = 0; i < a.length; i++) {
  26. if (indexOf(b, a[i]) > -1) res.push(a[i]);
  27. }
  28. return res;
  29. }
  30. intersect.big = function(a, b) {
  31. if (!b) return many(a);
  32. var ret = [];
  33. var temp = {};
  34. for (var i = 0; i < b.length; i++) {
  35. temp[b[i]] = true;
  36. }
  37. for (var i = 0; i < a.length; i++) {
  38. if (temp[a[i]]) ret.push(a[i]);
  39. }
  40. return ret;
  41. }
  42. function indexOf(arr, el) {
  43. for (var i = 0; i < arr.length; i++) {
  44. if (arr[i] === el) return i;
  45. }
  46. return -1;
  47. }