寻找关键'在基于“多值”的JS对象中

时间:2015-01-29 12:46:33

标签: javascript jquery html

采取以下减少的JS对象(JS小提琴:http://jsfiddle.net/52a4wq0x/1/) - 模拟我想的多维关联数组。

var ControlMap = {
    tb_RosMon: { row: 1, col: 1 },
    tb_RosTue: { row: 1, col: 2 },
    tb_RosWed: { row: 1, col: 3 },
    tb_RosThu: { row: 1, col: 4 },
    tb_RosFri: { row: 1, col: 5 },
    tb_RosSat: { row: 1, col: 6 },
    tb_RosSun: { row: 1, col: 7 },

    tb_AbsMon: { row: 2, col: 1 },
    tb_AbsTue: { row: 2, col: 2 },
    tb_AbsWed: { row: 2, col: 3 },
    tb_AbsThu: { row: 2, col: 4 },
    tb_AbsFri: { row: 2, col: 5 },
    tb_AbsSat: { row: 2, col: 6 },
    tb_AbsSun: { row: 2, col: 7 },

    ddl_ReasonMon: { row: 3, col: 1 },
    ddl_ReasonTue: { row: 3, col: 2 },
    ddl_ReasonWed: { row: 3, col: 3 },
    ddl_ReasonThu: { row: 3, col: 4 },
    ddl_ReasonFri: { row: 3, col: 5 },
    ddl_ReasonSat: { row: 3, col: 6 },
    ddl_ReasonSun: { row: 3, col: 7 },

    tb_AddMon: { row: 4, col: 1 },
    tb_AddTue: { row: 4, col: 2 },
    tb_AddWed: { row: 4, col: 3 },
    tb_AddThu: { row: 4, col: 4 },
    tb_AddFri: { row: 4, col: 5 },
    tb_AddSat: { row: 4, col: 6 },
    tb_AddSun: { row: 4, col: 7 },

    Mon_AddReason: { row: 5, col: 1 },
    Tue_AddReason: { row: 5, col: 2 },
    Wed_AddReason: { row: 5, col: 3 },
    Thu_AddReason: { row: 5, col: 4 },
    Fri_AddReason: { row: 5, col: 5 },
    Sat_AddReason: { row: 5, col: 6 },
    Sun_AddReason: { row: 5, col: 7 }
}

这基本上是输入ID(tb_RosMontb_AbsMon等)及其行&amp;的映射。 HTML <table>.中的列我尝试将键导航添加到相关输入(向上,向下,向左和向右)。

即。如果用户在tb_AbsTue上按下向下箭头,我会按如下方式获取tb_AbsTue的位置:

var row = ControlMap[SourceID]["row"]; //Returns 2
var col = ControlMap[SourceID]["col"]; //Returns 2
然后我会逐行递增(当他们按下时)给我一个第3行第2行的目标。然后我需要搜索上面的对象以查看是否存在输入(tb _ ###)在第3行col 2&amp;返回其ID。

怎么能这样做?简单的JS或JQuery就可以了。

1 个答案:

答案 0 :(得分:1)

Object.keyssome会这样做:

var id;
Object.keys(ControlMap).some(function(key) {
    var entry = ControlMap[key];
    if (entry.row == desiredRow && entry.col == desiredCol) {
        id = key;
        return true; // Stops the loop
    }
    return false;
});

这些都是ES5功能,但它们都可以用于IE8和其他旧版浏览器。或者,您可以使用for-in

var id;
var key;
var entry;
for (key in ControlMap) {
    entry = ControlMap[key];
    if (entry.row == desiredRow && entry.col == desiredCol) {
        id = key;
        break;
    }
}