当初始值不确定时比较逻辑小于但大于

Comparison logic less than but more than when initial value is indeterminate

下面的代码是涉及 moment.js 的一个更大项目的一小部分,但不需要花时间。我在 UTC 日期工作,我可以使用简单的值比较。我正在寻找 return 值之后的索引,但它是所有值中最低的(低于 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]);

可以用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);

您可以采用不排序的单循环方法,return 高于给定值的最小值的索引。

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]);