如何通过编程来确定n在这个序列中的位置
How to programmatically identify where n would fit in this sequence?
我有一个数字,我想要符合以下序列中最接近的值:
2, 5, 9, 12, 15, 19, 22, 25, 29, 32, 35, 39, 42...
如果10
通过,则变为12
, 13
变为15
, 17
变为19
。
我如何在函数中实现这个?
如果您不知道数组是否排序,您可以使用下面的代码来查找数组中最接近传入值(更高或更低)的值:
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]);
}
这是一个jsFiddle的解决方案,适用于无限系列的组合"+3+4+3+3+4+3+3+4+3+3+4....."这似乎是你的系列。http://jsfiddle.net/9Gu9P/1/希望这对你有帮助!
更新:看了你的答案后,我注意到你说你想要序列中的闭合数,但你的例子都去序列中的下一个数字,无论它是否与前一个数字最接近,所以这里是另一个jsfiddle,考虑到这一点,所以你可以选择你想要的那个:)。
http://jsfiddle.net/9Gu9P/2/function nextInSequence(x){
//sequence=2, 5, 9, 12, 15, 19, 22, 25, 29, 32, 35, 39, 42
var i= x%10;
switch(i){
case 2:case 5:case 9: return x;
case 0:case 1: return x+ 2-i;
case 3:case 4: return x+5-i;
default: return x+9-i;
}
}
警报(nextInSequence (10))
相关文章:
- jquery试图按名称获取按钮位置
- 我可以获得相对于被点击元素的确切点击位置吗
- 谷歌地图固定位置覆盖
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 如何以编程方式查找javascript语法错误的位置
- 如何获取以编程方式定义nodejs函数的位置
- 对象以编程方式移动后的 Fabricjs 在其新位置上不可选择
- Famo.us:如何以编程方式对滚动视图的位置进行动画处理
- 如何在浏览器中以编程方式启用共享位置
- JQuery 可拖动以编程方式拖动到位置
- 如何使用javascript/jquery以编程方式在文本字段中设置光标位置
- 以编程方式根据值更新jQuery滑块的位置
- iBooks翻页效果的编程位置和方式
- 如何通过编程方式获取npm安装全局模块的位置
- 在ExtJS中以编程方式更改portlet位置
- 基于UIWebView中的位置,用javascript编程地获取元素,然后点击它们
- 如何通过编程来确定n在这个序列中的位置
- 我可以在客户端浏览器中编程设置和/或获取滚动条的位置吗?
- async/await在函数式编程JavaScript中没有位置吗?
- 如何在谷歌JS自动完成API中以编程方式放置位置名称并获取结果