Javascript三进制不能在循环中工作

Javascript ternary not working in loop

本文关键字:循环 工作 不能 Javascript      更新时间:2023-09-26

我有以下循环:

while(i <= num_loops)
            {
                if(cat_ids.indexOf(parseInt(i, 10)) != -1)
                {
                    catsPie.addData({
                        value: cat_names[cat_ids.indexOf(parseInt(i, 10))],
                        color: "" + (i==0) ? '#150faf' : randomColor({luminosity: 'dark'}),
                        highlight: "#B48EAD",
                        label: "" + cat_names_string[cat_ids.indexOf(parseInt(i, 10))]
                    });
                }
                i++;
            }

这是一个动态的解决方案,用于在chart .js中向饼状图添加新数据。除了一件事,一切都如预期的那样。在第7行(颜色)中,我想只在== 0时将颜色设置为#150faf(蓝色)。在其他情况下,它应该等于randomColor的返回值。然而,无论如何,它总是返回#150faf。

如果我去掉这个三元部分就变成这样:

color: "" + randomColor({luminosity: 'dark'}),

一切工作,但这不是我想要的。第一个数据需要是#150faf。

我如何修复它?

三元运算符"" + (i==0)之前的表达式计算结果为字符串。JavaScript中的非空字符串是true——甚至字符串"false"也有一个布尔值true !你要做的是计算i == 0产生的布尔值。不需要将其与空字符串连接。

尝试替换这个

color: "" + (i==0) ? '#150faf' : randomColor({luminosity: 'dark'}),

 color: i==0 ? '#150faf' : randomColor({luminosity: 'dark'}),

试试这个:

var num_loops = 10;
var i = 0;
while (i <= num_loops) {
  var color = (i === 0) ? '#150faf' : '#ffffff';
  alert(color);
  i++;
}

把这一行改成…

color: "" + (i == 0 ? '#150faf' : randomColor({luminosity: 'dark'})),