基于“多个值”在JS对象中查找“键”

Finding 'Key' in a JS Object based on 'Multiple Values'

本文关键字:对象 查找 JS 多个值 基于      更新时间:2023-09-26

采用以下削减的JS对象(JS Fiddle: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等)及其在HTML中的行和列的映射<table>. 我正在尝试为有问题的输入(向上,向下,向左和向右)添加关键导航。

即如果用户在tb_AbsTue时按下向下箭头,我获取tb_AbsTue的位置如下:

var row = ControlMap[SourceID]["row"]; //Returns 2
var col = ControlMap[SourceID]["col"]; //Returns 2

然后,我将行递增 1(当他们按下时)给我一个第 3 行 col 2 的目的地。然后我需要搜索上面的对象以查看第 3 行 col 2 中是否存在输入 (tb_###) 并返回其 ID。

怎么能这样呢?普通的JS或JQuery会很好。

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