Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找最接近数组中的数字_Javascript_Arrays_Lodash - Fatal编程技术网

Javascript 查找最接近数组中的数字

Javascript 查找最接近数组中的数字,javascript,arrays,lodash,Javascript,Arrays,Lodash,我有下面的数组 const floorPerDayMilestones = [25, 50, 75, 100, 125, 150, 175, 200] 从前端用户输入任何数字,表示它是 const number = 136 我需要找到最接近的数字,但较小的一个。 所以输出应该是125 即使数字是149输出也应该是125 我怎样才能做到这一点。我试了很多方法,但都能找到答案 谢谢 如果像问题中那样按升序排序,应该可以 const floorPerDayMilestones = [25, 50,

我有下面的数组

const floorPerDayMilestones = [25, 50, 75, 100, 125, 150, 175, 200]
从前端用户输入任何数字,表示它是

const number = 136
我需要找到最接近的数字,但较小的一个。 所以输出应该是
125

即使数字是
149
输出也应该是
125

我怎样才能做到这一点。我试了很多方法,但都能找到答案


谢谢

如果像问题中那样按升序排序,应该可以

const floorPerDayMilestones = [25, 50, 75, 100, 125, 150, 175, 200];
const number = 136;

function findClosest(arr, num) {
  for (let i = 0; i < arr.length; ++i) {
    if (arr[i] > num) {
      return arr[i - 1];
    }
  }
}

console.log(findClosest(floorPerDayMilestones,number));
const floorperday里程碑=[25,50,75,100,125,150,175,200];
常数=136;
函数findClosest(arr,num){
对于(设i=0;inum){
返回arr[i-1];
}
}
}
日志(findClosest(FloorpDay里程碑,编号));

您可以使用
数组。为此减少

const floorperday里程碑=[25,50,75,100,125,150,175,200]
函数getClosestNumber(d){

返回FloorpDayMilements.reduce((a,b)=>b也许您应该看看以下内容:

在foreach中,将最接近的数字保存在变量中。然后检查您的数字是否大于数组中的数字。如果是,则使用您的最后一个变量,否则继续使用foreach

const floorperday里程碑=[25,50,75,100,125,150,175,200];
常数=136;
const nextLesser=楼层日里程碑。减少((nl,curr)=>(curr nl)?curr:nl,0)

console.log(nextLesser)
您可以按升序对数组进行排序,然后找到立即高于
number
的数字索引,然后该值减去一个位置将成为小于
number
的立即数

const floorperday里程碑=[25,50,75,100,125,150,175,200]
常数=136;
FloorpDayMilestones.sort((a,b)=>a-b);
var指数=FloorPerDayMilements.findIndex(val=>val>number);
var num=楼层日里程碑[index-1];

console.log(num);
您还可以筛选出大于给定值的数字,并从该子集中选择max

const floorperday里程碑=[25,50,75,100,125,150,175,200]
常数数=136
const filtered=FloorpDayMilements.filter(el=>el与lodash一起使用,您可以使用:

const number=[25,50,75,100,125,150,175,200]
const closestNum=(arr,n)=>{
let index=uu.sortedIndex(arr,n)
返回arr[index]==n?arr[index]:arr[index-1]
}
console.log(closestNum(number,135))//120
console.log(closestNum(number,160))//150
console.log(closestNum(number,180))//175


分享一些您尝试过的代码?您的问题陈述不清楚。12、125或300等值应该返回什么?遍历数组,直到找到一个更大的数字,然后取之前的一个。您可以执行
Math.floor(x/25)*25;
以获得25的最接近倍数(向下舍入)到你的号码。@Andreas是个打字错误,我返回的是索引而不是元素,我想现在可以了。谢谢你的帮助+1@Profer如果您找到了合适的答案,您可以将其标记为已接受,并且问题可以结束。:-)酷!但我相信这是两组操作,而使用reduce时是一组操作。@Nurbollypysbayev对,它的可读性比效率高,但是当我输入
数字
125
时,已经有两个
reduce
的答案了。我需要
125
@Profer我明白了“最接近数字,但较小的一个"如<代码>感谢您的帮助+1它给我<代码> 100 > <代码>代码> 125代码<代码>我需要<代码> 125代码/代码> @ Pror再试一次,我改变代码一点。所有需要做的就是改变<代码>谢谢你的帮助+1欢迎你!考虑选择最好的答案。谢谢你的帮助+1谢谢你他帮助我谢谢你的帮助