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;
}
我不知道如何为我的问题命名,但让我解释一下我的情况:
我有一个包含 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;
}