Created
November 19, 2016 15:43
-
-
Save awn-git/feb6b891b478fb9003b38e82995d65b6 to your computer and use it in GitHub Desktop.
javascriptの集合演算ユーティリティ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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