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);