javascript - 从对象返回数据时如何检查间接匹配?

标签 javascript object

我想检查数组中的变量。如果数字直接与我的值匹配,它就会工作。如果它低于匹配项,我怎样才能让它匹配以前的值。从我的代码:

var assassin_bp = {
    fhr: { 7:8, 15:7, 27:6, 48:5, 86:4, 200:3 },
    fcr: { 8:15, 16:14, 27:13, 42:12, 65:11, 102:10, 174:9 }
}
var char_fhr = 48;
var fhr_frames = assassin_bp[ 'fhr' ][ [char_fhr] ]

char_fhr48fhr_frames 返回 5
如果 char_fhr 的值为 47(或 27 到 47 之间的任何数字),fhr_frames 应返回 6
如果 char_fhr 的值为 49(或 48 到 85 之间的任何数字),fhr_frames 应返回 5

我不知道从哪里开始。一个对象可以包含一个范围吗?我应该有一个功能来检查它吗?

最佳答案

您需要遍历对象属性并将它们的名称与您的目标值进行比较。参见 for...in [MDN]Working with Objects [MDN] .

function valueForClosestKey(obj, target) {
    // get all keys smaller than or equal to `target`
    var keys = [];
    for(var k in obj) {
        if(k <= target) {
            keys.push(k);
        }
    }

    // order keys in ascending order
    keys.sort(function(a, b) {
        return a - b;
    }); 
    // e.g. `keys` is now [7, 15, 27, 48]      

    // get the "closest" key, which is the last one in the array
    if(keys.length > 0) {
        return obj[keys.pop()];
    }
    // if there are no keys smaller than `target` (i.e. `keys` is empty),
    // we just don't return anything (implicitly returns `undefined`)
}

var value = valueForClosestKey(assassin_bp[ 'fhr' ], char_fhr);

有必要以这种方式提取和排序键,因为对象迭代的顺序取决于实现。 IE。不保证属性的数字顺序正确。

关于javascript - 从对象返回数据时如何检查间接匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12805687/

相关文章:

javascript - 谷歌地图邮政编码绘制在错误的地方?

ios - 如何从 JSON NSDictionary 创建对象

javascript - 按值对对象属性进行排序

javascript - jQuery UI Slider - 只允许一个方向并删除范围

javascript - Uncaught Error : [vuex] getters should be function but "getters.default" is {}

javascript - jQuery 类型错误 : $ is not a function - But how to continue to use $?

c# - 使用套接字获取对象处置异常

python - 根据对象的属性(即使它们是 NoneType)对 Python 中的对象列表进行排序

javascript - 位置固定不适用于粘性菜单

javascript - 更改:before and :after pseudo-elements?的样式