Javascript 获取最接近的数组数
我想得到数组中最接近的数字。它必须是这样的:Javascript 获取最接近的数组数,javascript,arrays,Javascript,Arrays,我想得到数组中最接近的数字。它必须是这样的: 例如,我有一个数组:[1,3,7,15,40,55,70,80,95] 数字变量:numberD1; 如果数字1:8-最接近的数字只能是7。不是15岁。 如果数字1:54-它只能是40。不是55岁。 我是说,我想要像这样最接近的数字。但是我选择的数字不能高于最接近的数字(比如Math.floor()function) 对不起,我的英语不好。我希望我把我的问题说得很好。假设数组已排序,我认为理论上可以搜索指定的值,然后返回它前面的值 迭代搜索
例如,我有一个数组:
[1,3,7,15,40,55,70,80,95]
数字变量:
numberD1
;
如果数字1:8-最接近的数字只能是7。不是15岁。
如果数字1:54-它只能是40。不是55岁。
我是说,我想要像这样最接近的数字。但是我选择的数字不能高于最接近的数字(比如
Math.floor()
function)
对不起,我的英语不好。我希望我把我的问题说得很好。假设数组已排序,我认为理论上可以搜索指定的值,然后返回它前面的值 迭代搜索,然后返回numberD1[key-1]
啊,我刚才看到你在搜索任意值,我相信你仍然可以找到一种解决方法。只需搜索上面最接近的值,然后执行我显示的操作。假设数组已排序,我认为理论上可以只搜索指定的值,然后返回前面的值 迭代搜索,然后返回numberD1[key-1] 啊,我刚才看到你在搜索任意值,我相信你仍然可以找到一种解决方法。只需搜索上面最接近的值,然后执行我显示的操作。您可以使用:
//示例数组
a=[1,3,7,15,40,55,70,80,95]
//找到正确的号码
函数getClosest(a,编号1){
返回编号1-a.reduce(函数(最接近,v){
返回numberD1>=v?数学最小值(numberD1-v,最近的):最近的;
},1e100);
}
//输出结果
写(8+'=>'+getClosest(a,8));
文件。写(“
”);
写(54+'=>'+getClosest(a,54))代码>您可以使用:
//示例数组
a=[1,3,7,15,40,55,70,80,95]
//找到正确的号码
函数getClosest(a,编号1){
返回编号1-a.reduce(函数(最接近,v){
返回numberD1>=v?数学最小值(numberD1-v,最近的):最近的;
},1e100);
}
//输出结果
写(8+'=>'+getClosest(a,8));
文件。写(“
”);
写(54+'=>'+getClosest(a,54))代码>如果我理解正确,如果数组已排序,则您正在查找类似的内容:
var list = ...
var numberD1 = ...
var result = null;
for (var i = 0; i < list.length(); i++){
if (list[i] <= numberD1)
numberD1 = list[i];
}
return result;
var列表=。。。
变量numberD1=。。。
var结果=null;
对于(var i=0;i 如果(list[i]如果我理解正确,那么如果数组已排序,您正在查找类似的内容:
var list = ...
var numberD1 = ...
var result = null;
for (var i = 0; i < list.length(); i++){
if (list[i] <= numberD1)
numberD1 = list[i];
}
return result;
var列表=。。。
变量numberD1=。。。
var结果=null;
对于(var i=0;i if(list[i]我只是想发明Array.prototype.insert()
,它插入从给定索引值开始的一系列项,并返回经过修改的数组。这是函数JS所需要的。但是,受此问题约束的insertNum
函数不会修改原始数组
Array.prototype.insert=函数(i,…rest){
此.拼接(i,0,…剩余)
还这个
}
var-arr=[1,3,7,15,40,55,70,80,95];
var insertNum=(a,n)=>a.slice(0)
插入(a.reduce)(p,c,i)=>{var d=Math.abs(n-c);
p[0]>d&(p[0]=d,p[1]=n>ci+1:i);
返回p},[无穷大,0])[1],n);
document.writeln(“+JSON.stringify(insertNum(arr,8))+”);
function closest(num, array){
var closest = Infinity
for (var i = 0; i < array.length; i++)
if (closest < num){
if (array[i] < num && array[i] > closest)
closest = array[i]
}
else if (array[i] < num || array[i] < closest)
closest = array[i]
return closest != Infinity? closest :null
}
document.writeln(“+JSON.stringify(insertNum(arr,54))+”);
我只是想发明Array.prototype.insert()
插入从给定索引值开始的一系列项,并返回经过修改的数组。函数JS需要它。但是受此问题约束的insertNum
函数不会修改原始数组
function closest(num, array){
var closest = Infinity
for (var i = 0; i < array.length; i++)
if (closest < num){
if (array[i] < num && array[i] > closest)
closest = array[i]
}
else if (array[i] < num || array[i] < closest)
closest = array[i]
return closest != Infinity? closest :null
}
Array.prototype.insert=函数(i,…rest){
此.拼接(i,0,…剩余)
还这个
}
var-arr=[1,3,7,15,40,55,70,80,95];
var insertNum=(a,n)=>a.slice(0)
插入(a.reduce)(p,c,i)=>{var d=Math.abs(n-c);
p[0]>d&(p[0]=d,p[1]=n>ci+1:i);
返回p},[无穷大,0])[1],n);
document.writeln(“+JSON.stringify(insertNum(arr,8))+”);
function closest(num, array){
var closest = Infinity
for (var i = 0; i < array.length; i++)
if (closest < num){
if (array[i] < num && array[i] > closest)
closest = array[i]
}
else if (array[i] < num || array[i] < closest)
closest = array[i]
return closest != Infinity? closest :null
}
document.writeln(“+JSON.stringify(insertNum(arr,54))+”);
这应该可以完成以下工作:
function closest(num, array){
var closest = Infinity
for (var i = 0; i < array.length; i++)
if (closest < num){
if (array[i] < num && array[i] > closest)
closest = array[i]
}
else if (array[i] < num || array[i] < closest)
closest = array[i]
return closest != Infinity? closest :null
}
编辑-尽可能获得较低的数字
函数最近(num,数组){
var=无穷大
对于(var i=0;i最近)
最近的=数组[i]
}
else if(数组[i]
这应该可以完成以下工作:
编辑-尽可能获得较低的数字
函数最近(num,数组){
var=无穷大
对于(var i=0;i最近)
最近的=数组[i]
}
else if(数组[i]
您自己做了什么来尝试解决这个问题?检查数组forEach函数,我使用这个函数。我在stackoverflow上发现了这个问题。函数最近(num,arr){var mid;var lo=0;var hi=arr.length-1;而(hi-lo>1){mid=Math.floor((lo+hi)/2);if(arr[mid]