var a = {28.82:0, 28.91:0, 29.11:0, 30.11:0, 32.22:0, 32.23:0, 32.24:0};
function check(range) // range = 28.90;
if (a[range]){
// do stuff here...
}
在您可以注意到的上述情况中,条件永远不会成立。我想写一个逻辑,它考虑范围的+/- 0.01来检查数组内部。
我想通过范围检查功能驱动所有数组元素,但这太贵了。
有什么想法?
答案 0 :(得分:2)
让我们看看我是否理解正确。
您需要定义容差:
var a = [28.82, 28.91, 29.11, 30.11, 32.22, 32.23, 32.24];
function check(range) { // range = 28.90;
for (var i = 0; i < a.length; i++) {
if (Math.abs(a[i] - range) <= 0.01) {
// do stuff here...
}
}
}
a[i] - range
会产生您正在寻找的价值和数字之间的差异。 0.01
是套装。
答案 1 :(得分:1)
也许我误会了,但你不能这样做吗?
var a = {28.82:"a", 28.91:"b", 29.11:"c", 30.11:"d", 32.22:"e", 32.23:"f", 32.24:"g"};
function check(range){
if (a[range] || a[range+0.01] || a[range-0.01]){
// do stuff here...
}
}
或者你担心的方法太贵了?
注意如果if(a[range])
的值等于零或假,逻辑检查a[range]
将返回false。如果您希望代码在属性存在时运行,无论其值如何,您都需要稍微修改条件以考虑这些边缘情况。
编辑:正如@SaniHuttunen在评论中指出的那样,您可以使用if(a[range] !== undefined)
function check(range){
function propExists(key){
return a[key] !== undefined;
}
if (propExists(range) || propExists(range+0.01) || propExists(range-0.01){
// do stuff here...
}
}
答案 2 :(得分:1)
知道它介于两个元素之间会有帮助吗?
var a = [28.82, 28.91, 29.11, 30.11, 32.22, 32.23, 32.24];
function check(arr, range) {
var match = [];
arr.reduce(function(prev, curr){
if ( prev <= range && range <= curr ) { match = [prev, curr]; }
return curr;
})
return match;
}
console.log(check(a, 30.90));
// [30.11, 32.22]
JSFiddle演示。