【问题标题】:Javascript Object: find a key/value when in rangeJavascript对象:在范围内查找键/值
【发布时间】:2016-10-29 15:22:12
【问题描述】:

我有一个像这样的 Javascript 对象:

pItems = {
 single : {
  ...
  plz: {
   "1000": 12,
   "2000-2500" : 40
   "3000": 30  
  }
  ...
 }
}

我从输入字段中获取一个值,例如“2300”,现在我需要对象中这个“2300”的值。因为 2300 在 plz-key "2000-2500" 的范围内,所以我应该返回的值是 "40"。

如果我在关键“范围”中查找某些内容,我不知道如何找到正确的值。

感谢您的任何建议,请提供帮助。

【问题讨论】:

  • 如果他们输入,我不知道,1500,你会返回什么?

标签: javascript jquery object key range


【解决方案1】:

如果可能,您可以遍历键、拆分它们并执行检查。如果在范围内,则返回该项目并退出循环。

function getItem(value) {
    var item;
    Object.keys(object.plz).some(function (k) {
        var part = k.split('-');
        if (+value >= part[0] && +value <= (part[1] || part[0])) {
            item = object.plz[k];
            return true;
        }
    });
    return item;
}

var object = { plz: { "1000": 12, "2000-2500": 40, "3000": 30 } };

console.log(getItem('1000'));
console.log(getItem('2300'));

【讨论】:

    【解决方案2】:

    var pItems = {
     single : {
      plz: {
       "1000": 12,
       "2000-2500" : 40,
       "3000": 30  
      }
     }
    };
    
    var val =2300 ;
     $.each(pItems.single.plz, function(k,v) {
       var min = parseInt(k.split('-')[0]);
       var max = parseInt(k.split('-')[1]);
       if(isNaN(max) ){
          if(min == val){
             console.log(v);
             return;
          }
       }else if(val>=min || val <= max){
           console.log(v);
           return;
        }
    });
    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • 哇,这很快,而且是完整的代码!多谢!没想到会有完整的解决方案:)。
    【解决方案3】:

    包装成函数:

    function getValue(search) {
        for( var range in pItems.plz ) {
            var split = range.split("-");
    
            if( search >= parseInt(split[0]) && search <= parseInt(split[1] || split[0]) )
                return pItems.plz[range];
        }
    }
    

    呼叫:

    console.log(getValue(1000)); // 12
    console.log(getValue(2300)); // 40
    console.log(getValue(3000)); // 30
    console.log(getValue(5000)); // undefined
    

    【讨论】:

    • foreach?应该是for
    • 当然。我已经改变了它。坦克!
    猜你喜欢
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    相关资源
    最近更新 更多