很难描述我在这里想要找到的东西 - 特别是在标题中。最好用代码解释。
var time = [0,4,14,25,90,110];
随着时间的推移,它将比每个数组元素更大或更小。我想要做的是当点击一个按钮时,它检查哪个元素已经通过,然后选择该元素。
因此,例如,如果时间当前为32,则它将匹配条目25并将数组设置为时间[3],即25秒。
编辑:我忘了说如果时间逆转,它也应该更新。如果时间反转回来,比如12,那么它应该更新到第二个条目,即4秒答案 0 :(得分:1)
var time = [0, 4, 14, 25, 90, 110];
var current=32;
var index = -1;
time.forEach(function (a, i) {
if (a > current) {
return index;
}
index = i;
console.log("It will not print 4,5 or 6=>"+index)
});
console.log("Result:"+index);

答案 1 :(得分:0)
如果时间大于给定时间,您可以迭代数组并退出迭代。
function getIndex(array, value) {
var index = -1;
array.some(function (a, i) {
if (a > value) {
return true;
}
index = i;
});
return index;
}
var time = [0, 4, 14, 25, 90, 110];
console.log(getIndex(time, 32));

答案 2 :(得分:0)
反转时间数组并使用find()
let time = [0,4,14,25,90,110];
let find = 32;
function findRight(arr, val) {
return arr.indexOf(Array.from(arr).reverse().find(e => {
return val > e;
}));
}
console.log(findRight(time, find));

供您编辑;虽然我不明白你的意思" 时间倒退"但如果你需要一个新的结果,你只需要再次调用该函数。
答案 3 :(得分:0)
在这里,您为所有小于当前值的值创建另一个数组(32),然后使用Math.max
从第二个数组中选择最大值注意: - 在ecma脚本6中,(...)破坏性符号直接将数组转换为值,因此您可以在其上使用Math.max。
然后检查数组中此最大值的索引,并将其替换为当前值。
let time=[0,4,25,90,120];
let current =32;
let time2=[];
time.foreach(function(a,I){
if(a<current)
{
time2[]=a;
}
});
var j=Math.max(...time2);
var index=time.indexOf(j);
if(index!= -1){
time[index]=current;
}