JavaScript查找时间是否大于或小于数组元素条目

时间:2017-07-23 10:32:14

标签: javascript jquery arrays

很难描述我在这里想要找到的东西 - 特别是在标题中。最好用代码解释。

var time = [0,4,14,25,90,110];

随着时间的推移,它将比每个数组元素更大或更小。我想要做的是当点击一个按钮时,它检查哪个元素已经通过,然后选择该元素。

因此,例如,如果时间当前为32,则它将匹配条目25并将数组设置为时间[3],即25秒。

编辑:我忘了说如果时间逆转,它也应该更新。如果时间反转回来,比如12,那么它应该更新到第二个条目,即4秒

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;
}