JavaScript select 前 n 个布尔值

JavaScript select first n booleans

我不知道如何为我的问题命名,但让我解释一下我的情况:

我有一个包含 6 个数据系列的图表,我只想显示前 3 个不是 0 的数据。所以我有类似的东西:

if(a == 0) showA = false;
if(b == 0) showB = false;
if(c == 0) showC = false;
if(d == 0) showD = false;
if(e == 0) showE = false;
if(f == 0) showF = false;

以上是检查哪些系列有数据并隐藏那些为空的。但是,如果它们都有数据,则所有 6 个都将在图表中可见。

我想要的是 select 只有前 3 个 showX true 并标记其他 false 这样它们就不会出现在图表上.

我想我可以将 booleans 推到一个数组中,只取前 3 个 true,但由于每个系列都有自己的 visibility variable,我怎么会将其他标记为 false?

感谢任何帮助

在您的 if 子句中使用计数器。计算 true 的每个实例,并在达到一定数量的图表 (3) 时将其设置为 false

代码示例:

var max = 3;
var counter = 0;
showA = a != 0 && counter++ < max;
showB = b != 0 && counter++ < max;
showC = c != 0 && counter++ < max;
showD = d != 0 && counter++ < max;
showE = e != 0 && counter++ < max;
showF = f != 0 && counter++ < max; 

计数器仅在值 != 0 时递增的原因是因为 JavaScript 有 short-circuit evaluation

这可以通过使用数组变得更具可扩展性。

var values = [a, b, c, d, e, f];
var shouldBeVisible = new Array(values.length);

var counter = 0;
var max = 3;
for (var i = 0; i < values.length; i++) {
    shouldBeVisible[i] = values[i] != 0 && counter++ < max;
}