在 javascript 数组中搜索最接近的下一个值
Search closest next value in javascript array
我有一个像var test = [2,5,8,12,56];
这样的javascript数组,现在我想搜索最接近的下一个值9。所以在这种情况下,输出是 12(而不是 8!
这里有一个简单的方法可以做到这一点:
function getNextVal(arr, val) {
// omit the next line if the array is always sorted:
arr = arr.slice(0).sort(function(a,b){return a-b;});
for (var i=0; i < arr.length; i++)
if (arr[i] >= val)
return arr[i];
// return default value when val > all values in array
}
如果搜索值在数组中,您不会说要返回什么,所以我假设您要返回它。如果"最接近的下一个值"的意思是它应该始终返回高于搜索值更改arr[i] >= val
的下一个数字,以使用 >
而不是 >=
。
如果你有一个大数组,你可能想要某种二进制排序,而不仅仅是从头开始。
如果数组被排序,您可以尝试这样做,您需要针对边界情况进行调整,这只是为了算法的想法......
NUM is input
TEST is your array
INDEX is index variable
For INDEX from 0 .. TEST.SIZE -1
IF NUM > TEXT[INDEX]
RETURN TEXT[INDEX]
下面
给出了一个非常简单的代码。希望这对你有帮助
var test = [2,5,8,12,56];
var key = 9;
var closestNext=1000;
for(var i=0;i<test.length;i++)
{
if(test[i] > key)
{
if(test[i]<closestNext)
{
closestNext = test[i];
}
}
}
alert(closestNext);
在此处查看工作
1 首先对数组进行排序,使用 arr.sort();
,仅按升序 ( 3,6,4,7,1 --> 1,3,4,6,7
) 对值进行排序,然后迭代:
function getNext(inputVal,arr)
{
arr.sort();;
for (var i=0;i<arr.lenght;i++)
{
if (arr[i] >= inputVal)
{
return arr[i];
}
}
throw new Error('Out of range');
}
如果您知道数组总是要排序,或者事先对数组进行排序是合理的(例如,当数组不经常更改但您需要大量检索时),则可以对排序后的数组使用二叉搜索。
如果在数组中找不到该值,则返回上限,指示大于给定值的最小元素。这平均给出了 O(log n) 复杂性,而朴素方法(遍历整个数组)平均给出了 O(n) 复杂性。
// Binary search
// Adapted from http://jsfromhell.com/array/search
function binarySearch(arr, val, insert) {
var high = arr.length, low = -1, mid;
while (high - low > 1) {
mid = (high + low) >> 1;
if (arr[mid] < val) low = mid;
else high = mid;
}
if (arr[high] == val || insert) {
return high;
} else {
return -1;
}
}
function getClosestNext(arr, val) {
// Get index
var i = binarySearch(arr, val, true);
// Check boundaries
return (i >= 0 && i < arr.length) ? arr[i] : null;
}
相关文章:
- 在 javascript 数组中搜索最接近的下一个值
- 以最接近的图标为目标,将其更改为另一个图标
- 如何四舍五入到下一个最大数字
- 查找具有特定数据属性 jquery 的最接近的上一个元素
- 将下一个/上一个输入集中在达到最大长度或退格键上
- Javascript:向上和向下舍入到最接近的 5,然后找到一个公分母
- 查找包含 .myClass 的最接近的前一个同级
- 将数字四舍五入到最接近的千,根据数字向上或向下
- 只选择一个最接近的元素
- 用三个.js从圆柱体上切下一个切片,画圆柱体最简单的方法是什么
- Javascript四舍五入到最接近的小数点后2位(但向下五舍五入)
- 向上舍入/向下舍入一个时刻js 时刻到最接近的分钟
- Javascript获取下周二或周五(最接近)的日期
- Sench Touch:什么是最简单的方法,以防止多次点击下一个按钮
- 获取最接近具有特定id的前一个元素
- 给定一个正数和负数的列表.什么是最接近零的优雅解
- 我如何从最接近的'tr'的第n个元素获得一个值
- 在数组中找到下一个最大的数字
- 当最后一个点在当前x轴最小值之前,下一个点在当前x轴最大值之后时,高图不显示线
- 另一个最接近的子线程:查找与选择器匹配的元素的最近祖先