下面的代码是一个涉及moment.js的更大项目的一小部分,但moment不是必需的。我正在使用 UTC 日期,我可以使用简单的值比较。我希望返回值之后的索引,但它是所有值中最低的(低于 uc(。换句话说,低于faketimenow
的值。由于这些值是无序的,因此都需要根据最低值检查它们。
下面的代码有效,但我很好奇是否可以在没有占位符uc
变量来存储初始起始变量的情况下构建它。如果我正在寻找最大,但不确定如何与具有不确定初始值的值进行比较,这将很容易。我尝试使用 arr[0] 作为起始值,但不幸的是,它是通过的,因为它是最少的数字。
// random range for demonstration purposes
var arr = [1, 2, 3, 4, 100, 17, 22, 15, 13, 11, 23];
var faketimenow = 10;
//initial index to use
var indextouse = 0;
// using a variable with initial start value that is ridiculously out of scope
var uc = 1000000000000;
for (i = 0; i < arr.length; i++) {
console.log("i: " + i + " , faketimenow: " + faketimenow + " , indextouse: " + indextouse + ", uc: " + uc);
if (arr[i] > faketimenow && arr[i] < uc) {
uc = arr[i];
indextouse = i;
}
}
console.log(arr[indextouse]);
您可以采用不排序的单循环方法,并返回高于给定值的最小值的索引。
var array = [1, 2, 3, 4, 100, 17, 22, 15, 13, 11, 23],
value = 10,
index = -1,
i;
for (i = 0; i < array.length; i++) {
if (array[i] > value && (index === -1 || array[i] < array[index])) index = i;
}
console.log(array[index]);
与reduce
.
var array = [1, 2, 3, 4, 100, 17, 22, 15, 13, 11, 23],
value = 10,
index = array.reduce((r, v, i, a) => v > value && (r === -1 || v < a[r]) ? i : r, -1);
console.log(array[index]);
您可以使用Infinity
作为初始值,一切都低于该值。
但更简单的解决方案是对数组进行排序,然后找到高于faketimenow
的第一个元素。
// random range for demonstration purposes
var arr = [1, 2, 3, 4, 100, 17, 22, 15, 13, 11, 23];
var faketimenow = 10;
arr.sort((a, b) => a - b);
var uc = arr.find(n => n > faketimenow);
console.log(uc);