首页 > 解决方案 > javascript中数组允许哪些索引值

问题描述

今天我在探索d3-time库,借助该库我们可以创建日期轴。我在其中一个文件中遇到了这一。谁能解释一下这条线在javascript中是如何工作的。

i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];

相同的屏幕截图 在此处输入图像描述

下面是上一行中出现的所有变量的屏幕截图。我已经调试并收集了执行此行时的所有值

在此处输入图像描述

谁能解释一下索引结果是什么。它实际上是在12 这里我想了解它是如何获得价值12的。

我的意思是在使用当前数据执行上述行之后i=tickIntervals[12]

如果这不是提出此问题的正确平台,请指导将其放在哪里

标签: javascriptarraysreactjsd3.jsecmascript-6

解决方案


大声朗读这段代码我会说:

在这条线上,我们试图找到适合目标持续时间的刻度大小,以刻度间隔为单位,一个可能的间隔数组(秒、分钟、小时……)。

上面的二分法确定了两个持续时间,一个低于目标(i-1,持续时间 0 = tickIntervals[i-1][2]),另一个高于目标(i,持续时间 1)。我们现在需要找到最接近我们的目标。

tickIntervals 中的持续时间越来越大。因此,比较不能线性进行(15 分钟是每分钟 15 次和每小时 1/4 次,因此使用小时刻度比使用分钟刻度更接近)。

这条线没有使用对数来测量差异,而是将 target / duration0 与 duration1 / target 进行比较,这给出了等效的结果,但计算速度更快。这说明target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target

如果这个比较是真的,那么我们使用下区间 ( tickIntervals[i - 1]),否则使用上区间 ( tickIntervals[i])。

运算符的?:优先级最低,因此它被评估为

(target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target) ? i - 1 : i

我希望这个阅读是正确的,并澄清了意图。


推荐阅读