我有一个数字我想要符合以下序列中最接近的值:
2, 5, 9, 12, 15, 19, 22, 25, 29, 32, 35, 39, 42...
如果10
通过,它将变为12
,13
将变为15
,17
将变为19
。
我如何在函数中处理它?</ p>
答案 0 :(得分:1)
如果您不知道数组是否已排序,您可以使用这样的代码来查找数组中最接近传入值(更高或更低)的值:
var list = [2, 5, 9, 12, 15, 19, 22, 25, 29, 32, 35, 39, 42];
function findClosestValue(n, list) {
var delta, index, test;
for (var i = 0, len = list.length; i < len; i++) {
test = Math.abs(list[i] - n);
if ((delta === undefined) || (test < delta)) {
delta = test;
index = i;
}
}
return(list[index]);
}
如果您想要最接近的数字而不进行更新并且数组已排序,您可以使用以下代码:
var list = [2, 5, 9, 12, 15, 19, 22, 25, 29, 32, 35, 39, 42];
function findClosestValue(n, list) {
var delta, index;
for (var i = 0, len = list.length; i < len; i++) {
delta = n - list[i];
if (delta < 0) {
return(index ? list[index] : undefined);
}
index = i;
}
return(list[index]);
}
答案 1 :(得分:0)
这是一个jsFiddle,其解决方案适用于无限系列的组合“+ 3 + 4 + 3 + 3 + 4 + 3 + 3 + 4 + 3 + 3 + 4 ......”成为你的系列。 http://jsfiddle.net/9Gu9P/1/希望这会有所帮助!
更新:
在看了你的答案之后,我注意到你说你想要序列中的结束数字,但是你的例子都会转到序列中的下一个数字,无论它是最接近的还是没有比较前一个数字,所以这里是另一个有效的jsfiddle考虑到这一点,你可以选择你想要的那个:)。
答案 2 :(得分:0)