繁体   English   中英

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

[英]Comparison logic less than but more than when initial value is indeterminate

下面的代码是涉及 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]);

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

您可以采用单循环方法而不进行排序并返回给定值之上的最小值的索引。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM