JavaScript选择前n个布尔值

时间:2015-07-22 08:53:44

标签: javascript highcharts boolean

我不知道如何标题我的问题,但让我解释一下我的情景:

我有一个包含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个数据。

我想要的是仅选择showX的前{3} true并标记其他false,以便它们不会显示在图表上。

我在想我可以将booleans推送到一个数组,只选择前{3}个true,但由于每个系列都有自己的visibility variable,我该如何标记其他人为false

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

在if子句中使用计数器。计算false的每个实例,并在达到一定数量的图表(3)时将其设置为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;

代码示例:

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;
}

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

使用数组可以使其更具可扩展性。

app.post('/articles', function newArticle(req, res, next) {

  var article = new Article(req.body);
  article.set('is_owner', req);
  article.save(function onSaved(err, savedArticle) {
    if (err) {
      return next(err);
    }
    res.json(savedArticle);
  });

});