多次元 Map で重要度を定義する
HTML
<ul>
<li><a href="https://gist.github.com/think49/00326b750d48f5f9c48a042f1b19a1c2">multidimensional-map.js : 多次元Mapを生成 - Gist</a></li>
<li><a href="https://teratail.com/questions/84834#reply-132819">C# - 適切な分岐処理について(84834)|teratail</a></li>
</ul>
JavaScript
/**
* multidimensional-map.js
*
* @version 1.0.0
* @author think49
* @url https://gist.github.com/think49/00326b750d48f5f9c48a042f1b19a1c2
* @license http://www.opensource.org/licenses/mit-license.php (The MIT License)
*/
function createMultidimensionalMap (mapData) {
'use strict';
var rootMap;
{
var entry = mapData[0],
keys = entry[0],
keysIndex = keys.length - 1;
rootMap = new Map([[keys[keysIndex], entry[1]]]);
while (keysIndex--) {
rootMap = new Map([[keys[keysIndex], rootMap]]);
}
}
for (var i = 1, len = mapData.length, entry, keys, keysIndex, keysLen, map, newMap; i < len; ++i) {
entry = mapData[i];
keys = entry[0];
keysLen = keys.length;
if (keysLen > 1) {
map = rootMap;
for (var j = 0, key; j < keysLen; ++j) {
key = keys[j];
if (!map.has(key)) {
break;
} else {
map = map.get(key);
}
}
keysIndex = keys.length - 1;
newMap = j !== keysIndex ? new Map([[keys[keysIndex], entry[1]]]) : entry[1];
while (--keysIndex > j) {
newMap = new Map([[keys[keysIndex], newMap]]);
}
map.set(keys[j], newMap);
} else if (keysLen === 1) {
rootMap.set(keys[0], entry[1]);
}
}
return rootMap;
}
'use strict';
function createFunction (rules) {
var keys = [...rules[0][0].keys()],
hasOwnProperty = Object.prototype.hasOwnProperty;
for (var i = 0, len = rules.length, rule; i < len; ++i) {
rule = rules[i];
rule[0] = [...rule[0].values()];
}
rules = createMultidimensionalMap(rules);
return function getImportance3 (conditions) {
var map = rules;
for (var i = 0, len = keys.length, key; i < len; ++i) {
key = keys[i];
if (!hasOwnProperty.call(conditions, key)) {
throw new ReferenceError;
}
map = map.get(conditions[key]);
}
return map;
};
}
var rules = [
[new Map([['A', false], ['B',...