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谢谢你他帮助我谢谢你的帮助