使用isBetween函数比较对象中的键值
Comparing Key Values in an Object using an isBetween functions
我在比较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;
});
相关文章:
- 将JSON对象的表示形式更改为显式键/值格式
- JavaScript,循环具有不同数量对键值的对象
- 通过键/值引用更新Javascript对象值
- JS在封装对象中查找键值对
- ES6类型表示可以反转的键值对象
- 下划线.js,根据键值删除对象数组中的重复项
- 在键值对的唯一组合上合并对象
- 将键/值数组中的对象与另一个对象(键/值)进行比较
- javascript对象键值对
- 根据嵌套数组中匹配的键值获取对象
- 如何将这些对象键值放入文本框中
- 将键、值对象转换为仅值数组
- 如何通过在JavaScript对象中的多个键/值对中查找最小值来选择键/值配对
- 将具有键值对数组的JavaScript对象发布到WebApi时出现问题
- 使用类似于 Array.prototype.map() 的方法将数组转换为键值对象
- JavaScript 从字符串创建键值对象数组
- 如何在javascript中仅用键值对象的值重建数组
- 从字符串生成js键值对象
- 在jQuery中添加属性时,使用attr()方法,将属性作为键值对象传递,还是直接传递,哪种方法执行速度最快?
- 如何在键值对象中添加引号