我如何在数组中找到最接近的数字,而不用遍历
How do I find the closest number in an array, without going over?
我正在编写一个简单的程序来确定下一班火车的时间。我有一个包含所有列车时间的数组,我只是不知道如何确定哪一个是最接近当前时间的,而不需要遍历。以下是目前为止的内容:
var d = new Date();
var hours = d.getHours();
var minutes = d.getMinutes();
var time = hours + minutes;
console.log(time);
var trainTimes = [1125, 1155, 1225, 1255, 1325, 1355, 1425, 1455, 1526, 1629, 1644, 1709];
function nextTrain(time) {
}
在函数nextTrain()
中,我应该简单地做if-else语句,还是有更好的方法?
由于trainTimes数组是有序的,因此可以循环遍历它们,直到找到当前时间之后的第一个,然后中断。
function nextTrain(time) {
for (i = 0; i<trainTimes.length; i++){
if(trainTimes[i]>time){
console.log("the next train is " + trainTimes[i]);
break;
}
}
}
var d = new Date();
var hours = d.getHours();
var minutes = d.getMinutes();
var time = hours + minutes;
console.log(time);
// given sorted array.
var trainTimes = [1125, 1155, 1225, 1255, 1325, 1355, 1425, 1455, 1526, 1629, 1644, 1709];
// returns nth train
function nextTrain(num, arr) {
n = 0
while (arr[n] <= num){ // consider < vs. <=
n++;
}
return arr[n];
}
console.log(nextTrain(time,trainTimes))
灵感来源于链接
我建议你在这里做二进制搜索,因为你的数组已经排序了。您可以查看此链接了解有关实现的详细信息。
在找出当前时间在数组中的位置后,可以计算当前时间与两个最近邻居的差值。这取决于当前时间在二叉树中的位置。无论如何,这个方法是有效的。
你需要把你的小时数乘以100。
你可以尝试这样做:
nextTrain(time);
function nextTrain(time) {
var timeFound = false;
for(var i = 0; i < trainTimes.length; i++){
if(time > trainTimes[i - 1] && time < trainTimes[i] && !timeFound ){
console.log("Next train time is: " + trainTimes[i]);
timeFound=true;
}
}
}
希望对你有所帮助
var d = new Date();
var hours = d.getHours();
var minutes = d.getMinutes();
var time = hours + minutes;
console.log(time);
var trainTimes = [1125, 1155, 1225, 1255, 1325, 1355, 1425, 1455, 1526, 1629, 1644, 1709];
var diff = new Array(12);
for (i = 0; i < trainTimes.length; i++) {
diff[i] =Math.abs( time + trainTimes[i]);//difference
}
var diff_sort = diff.sort(function(a, b){return a-b});//acs sort
var nearestIndex = diff.indexOf(diff_sort[0]);
var nearestValue = trainTimes[nearestIndex];
alert(nearestValue)
就用这个:
var nextTimeIndex = (trainsTimes.indexOf(time) >= trainsTimes.length) ? 0 : trainsTimes.indexOf(time) + 1;
var nextTrain = trainsTimes[nextTimeIndex];
相关文章:
- 循环遍历以数组为值的Javascript对象
- 遍历类元素数组,并在jquery中选择同级元素
- Jquery遍历表元素
- Chrome扩展:遍历不同的页面并收集数据
- 如何遍历包含对象的数组-javascript
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 遍历AngularJs中的对象
- JQuery 遍历当前 SELECT 值
- 循环遍历包含另一个表单的表单
- 使用Yadda和Protractor重用步骤定义,遍历所需文件
- 遍历D3中所有数据点之间的所有值
- 自动遍历所有链接的事件
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- 如何使用 document.querySelectorAll 遍历选定的元素
- 循环遍历循环的数字序列
- 有没有办法在数字未知时遍历所有 jwplayer 实例
- 循环遍历具有数字类型的输入
- 使用数字序列遍历 json 的不同属性
- 试着遍历它.除了数字,其他的都加不起来
- 我如何在数组中找到最接近的数字,而不用遍历