Skip to content

Instantly share code, notes, and snippets.

@awn-git
Created November 19, 2016 15:43
Show Gist options
  • Save awn-git/feb6b891b478fb9003b38e82995d65b6 to your computer and use it in GitHub Desktop.
Save awn-git/feb6b891b478fb9003b38e82995d65b6 to your computer and use it in GitHub Desktop.
javascriptの集合演算ユーティリティ
var Util = {};
Util.Array = (function() {
/* 以下、重複する要素を持たない配列を入力の前提としない */
//恒等写像
function _identity(arr) {
return arr.map(function(elm) {
return elm; });
}
//重複除去
function _uniq(arr) {
return arr.filter(function(elm, ind, ary) {
return ary.indexOf(elm) === ind; });
}
//配列が集合っぽいか否か
function _isSet(arr) {
return _uniq(arr).length === arr.length;
}
/* 以下、重複する要素を持たない配列を入力の前提とする */
//集合が等しいか否か
function _equal(arr1, arr2) {
var rtn1 = (arr1.map(function(elm) {
return arr2.includes(elm); })).every(function(elm) {
return elm; });
var rtn2 = (arr2.map(function(elm) {
return arr1.includes(elm); })).every(function(elm) {
return elm; });
return rtn1 && rtn2;
}
//和集合
function _union(arr1, arr2) {
var con = arr1.concat(arr2);
var rtn = _uniq(con);
return rtn;
}
//差集合
function _diff(arr1, arr2) {
var rtn = arr1.filter(function(elm) {
return !arr2.includes(elm); });
return rtn;
}
//共通部分
function _intersection(arr1, arr2) {
var rtn = arr1.filter(function(elm) {
return arr2.includes(elm); });
return rtn;
}
return {
uniq: _uniq,
isSet: _isSet,
identity: _identity,
equal: _equal,
union: _union,
diff: _diff,
intersection: _intersection
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment