JavaScript 합집합, 교집합, 차집합, 대칭차

Set operations with JavaScript
자바스크립트 집합 연산
JavaScript 합집합, 교집합, 차집합, 대칭차

1 합집합[ | ]

 

function union(a, b) {
  var tmp={}, res=[];
  for(var i=0;i<a.length;i++) tmp[a[i]]=1;
  for(var i=0;i<b.length;i++) tmp[b[i]]=1;
  for(var k in tmp) res.push(k);
  return res;
}

2 교집합[ | ]

 

function intersect(a, b) {
  var tmp={}, res=[];
  for(var i=0;i<a.length;i++) tmp[a[i]]=1;
  for(var i=0;i<b.length;i++) if(tmp[b[i]]) res.push(b[i]);
  return res;
}

3 차집합[ | ]

 

function array_diff(a, b) {
  var tmp={}, res=[];
  for(var i=0;i<a.length;i++) tmp[a[i]]=1;
  for(var i=0;i<b.length;i++) { if(tmp[b[i]]) delete tmp[b[i]]; }
  for(var k in tmp) res.push(k);
  return res;
}

4 대칭차[ | ]

 

function sym_diff(a, b) {
  var tmp={}, res=[];
  for(var i=0;i<a.length;i++) tmp[a[i]]=1;
  for(var i=0;i<b.length;i++) { if(tmp[b[i]]) delete tmp[b[i]]; else tmp[b[i]]=1; }
  for(var k in tmp) res.push(k);
  return res;
}

5 실행 예시[ | ]

function union(a, b) {
  var tmp={}, res=[];
  for(var i=0;i<a.length;i++) tmp[a[i]]=1;
  for(var i=0;i<b.length;i++) tmp[b[i]]=1;
  for(var k in tmp) res.push(k);
  return res;
}
 
function intersect(a, b) {
  var tmp={}, res=[];
  for(var i=0;i<a.length;i++) tmp[a[i]]=1;
  for(var i=0;i<b.length;i++) if(tmp[b[i]]) res.push(b[i]);
  return res;
}
 
function array_diff(a, b) {
  var tmp={}, res=[];
  for(var i=0;i<a.length;i++) tmp[a[i]]=1;
  for(var i=0;i<b.length;i++) { if(tmp[b[i]]) delete tmp[b[i]]; }
  for(var k in tmp) res.push(k);
  return res;
}
 
function sym_diff(a, b) {
  var tmp={}, res=[];
  for(var i=0;i<a.length;i++) tmp[a[i]]=1;
  for(var i=0;i<b.length;i++) { if(tmp[b[i]]) delete tmp[b[i]]; else tmp[b[i]]=1; }
  for(var k in tmp) res.push(k);
  return res;
}
 
var arr1 = ['A', 'B', 'C', 'D'];
var arr2 = ['C', 'D', 'E', 'F'];

// Union
console.log( union(arr1, arr2) );
// ["A", "B", "C", "D", "E", "F"]

// Intersection
console.log( intersect(arr1, arr2) );
// ["C", "D"]

// Complement
console.log( array_diff(arr1, arr2) );
// ["A", "B"]

// Symmetric difference
console.log( sym_diff(arr1, arr2) );
// ["A", "B", "E", "F"]

6 같이 보기[ | ]

7 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}