使用isBetween函数比较对象中的键值

Comparing Key Values in an Object using an isBetween functions

本文关键字:键值 对象 比较 isBetween 函数 使用      更新时间:2023-09-26

我在比较JavaScript对象中的键值时遇到问题。我知道如何检查值的唯一方法是使用(for in)循环,这在这里似乎没有任何帮助:

var brackets = {
    "39.6": 415050,
    "33": 413350,
    "28": 190150,
    "25": 91150,
    "15": 37650,
    "10": 9275,
};
function isBetween(num){
    // just an example
    if (num < 413350 && num > 190150) 
        return "28";
}

编辑

如果num介于两个值之间,则返回值应为下限的键

function isBetween(num) {
    var sortedKeys = Object.keys(brackets) // get all keys
        .map(Number)                       // make them Numbers
        .sort(function (a, b) {            // sort them as the order isn't guaranteed
            return a == b ? 0 : (a > b ? 1 : -1);
        });
    for (var i = 0, l = sortedKeys.length - 1; i < l; i++) {
        if (num > brackets[sortedKeys[i]] && num < brackets[sortedKeys[i + 1]]) {
            return sortedKeys[i];
        }
    }
}

小提琴

返回下界或undefined 的密钥

排序键的部分可能不是必要的,但由于不能保证对象中元素的顺序,我也添加了这一步骤。

这可能不是最有效的方法。我只是想,如果交换密钥和值可以产生更好的片段

var brackets = {
        "39.6": 415050,
        "33": 413350,
        "28": 190150,
        "25": 91150,
        "15": 37650,
        "10": 9275,
    };
function isBetween(num) {    
    var x = brackets;
    var bsNum;
    var tempArray = []
    for (key in x) {            //Get the values 
        tempArray.push(x[key]);
    }
   for (var i = 0; i < tempArray.length; i++) {   //use tempArray array to find the range
        if (num > tempArray[i] && num < tempArray[i + 1]) {
            bsNum = tempArray[i + 1];
            break;
        } else if (num < tempArray[i]) { // if number is less than 9275
            bsNum = tempArray[i];
            break;
        }
    }
    for (key in x) {
        if (bsNum == x[key]) {
            console.log(key)
        }
    }
}
isBetween(9274);
isBetween(413349);
isBetween(37659);
isBetween(91100);
isBetween(190150);
isBetween(415050);
isBetween(413300);

JSFIDDLE

使用氯代甲烷_.keysIn_.min。我们可以得到CCD_ 5下界的密钥。

_.min( _.keysIn( brackets, function(e) { 
     return ((e < 413350 ) && (e >= 190150)); 
}));

keysIn返回[190150, 413350)范围内的所有密钥,min得到下界。

具有翻转对象的简单解决方案:

var flipped = {}, prop, vals = [];
for (prop in brackets){
    flipped[brackets[prop]] = prop;
    vals.push(brackets[prop]);
}
function isBetween(num){
    for(var i = 0; i < vals.length; i++){
       if(num >= vals[i] && num < vals[i+1]){
           return flipped[vals[i]];   
       } 
    }
    return false;
}
var num = 414000;
console.log(isBetween(num));
$.each(brackets,function(k,v){
   return ((parseInt(v) < 413350) && (parseInt(v) > 190150)) ? 28 : false;
});