Javascript lookup table
二維表格查表
HTML
<h2>Lookup table result </h2>
<ul>
<li>2-dimension example = <span id="result1" /></li>
<li>1-dimension example = <span id="result2" /></li>
</ul>
JavaScript
var Engine = {}
Engine.lookup = function (opt) {
function index(value, predictors) {
for (var i = 0; i < predictors.length; i++) {
var parts = predictors[i];
var expr = [];
for (var j = 0; j < Math.floor(parts.length / 2) * 2; j += 2) {
var sub = ["value", parts[j], "parts[", j + 1, "]"].join("");
expr.push(sub);
}
expr = expr.join(" && ");
var result = eval(expr);
if (result) {
return i;
}
}
return;
}
var column = index(arguments[1], opt.x_axis);
var row = 0;
if (opt.y_axis && arguments.length > 2) {
row = index(arguments[2], opt.y_axis);
}
return opt.data[row][column];
};
var result;
// 二維查表
//
// <40 40~49 50~59 >=60 (X-axis)
// ============================
// 男 1 2 3 4
// 女 5 6 7 8
//
// (Y-axis)
//
result = Engine.lookup({
x_axis: [['<', '40'], ['>=', '40', '<', '50'], ['>=', '50', '<', '60'], ['>=', '60']],
y_axis: [['==', '男'], ['==', '女']],
data: [[1, 2, 3, 4], [5, 6, 7, 8]]
}, 55, "女");
$("#result1").text(result);
// 一維查表
//
// <10 10~20 20~30 >=30 (X-axis)
// ============================
// 男 9 7 4 2
//
result = Engine.lookup({
x_axis: [['<', '10'], ['>=', '10', '<', '20'], ['>=', '20', '<', '30'], ['>=', '30']],
data: [[9, 7, 4, 2]]
}, 65);
$("#result2").text(result);