在小数范围内搜索
Search within a decimal range
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 以检查数组内部。
我曾想过通过范围检查函数驱动所有数组元素,但那太昂贵了。
有什么想法吗?
让我们看看我是否理解正确。
您需要定义一个公差:
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
是设定的公差。
可能我理解错了,你就不能这样做吗?
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...
}
}
还是您担心的方法太贵了?
请注意,如果 a[range]
处的值等于零或假,逻辑检查 if(a[range])
将 return 假。如果您希望代码 运行 只要 属性 存在,无论其值如何,您都需要稍微修改您的条件以解决这些边缘情况。
编辑:正如@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...
}
}
知道它介于哪两个元素之间会有帮助吗?
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 演示。
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 以检查数组内部。
我曾想过通过范围检查函数驱动所有数组元素,但那太昂贵了。
有什么想法吗?
让我们看看我是否理解正确。
您需要定义一个公差:
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
是设定的公差。
可能我理解错了,你就不能这样做吗?
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...
}
}
还是您担心的方法太贵了?
请注意,如果 a[range]
处的值等于零或假,逻辑检查 if(a[range])
将 return 假。如果您希望代码 运行 只要 属性 存在,无论其值如何,您都需要稍微修改您的条件以解决这些边缘情况。
编辑:正如@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...
}
}
知道它介于哪两个元素之间会有帮助吗?
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 演示。