Javascript d3.attr(';fill';“rgba(0,0,0,0.18)”有效;调用函数无效

Javascript d3.attr(';fill';“rgba(0,0,0,0.18)”有效;调用函数无效,javascript,d3.js,Javascript,D3.js,我有一些D3代码,工作正常。它包括这样一个调用,用灰色填充区域: ... .attr("fill", "rgba(0,0,0,.18)") ... 但是,如果我将该行更改为以下内容(其中fillSmoke()返回相同的字符串“rgba(0,0,0,18)”),则图表将填充黑色,而不是所需的灰色 .attr("fill", function(d, i) {fillSmoke(d,i)}) ... and later ... fil

我有一些D3代码,工作正常。它包括这样一个调用,用灰色填充区域:

...
.attr("fill", "rgba(0,0,0,.18)")
...

但是,如果我将该行更改为以下内容(其中fillSmoke()返回相同的字符串
“rgba(0,0,0,18)”
),则图表将填充黑色,而不是所需的灰色

.attr("fill", function(d, i) {fillSmoke(d,i)})

... and later ...

fillSmoke = (d, i) => {
    return "rgba(0,0,0,0.18)"
  }

我感觉D3在第一种情况下必须解析“rgba(0,0,0,18)”,但在第二种情况下不能。我该怎么做才能从fillSmoke()返回所需的灰色值?谢谢


解决方案:将函数体更改为包含
返回
(例如,
{return fillSmoke(d,i)}
谢谢!

attr方法的第二个参数可以是函数,但它必须返回您要使用的颜色值。现在,您的函数只调用fillSmoke,但不返回任何值。请将行更改为:

.attr("fill", function(d, i) { return fillSmoke(d,i); })
返回值需要return语句——只要fillSmoke返回所需的颜色值,该语句就可以工作。或者,这也可以工作:

.attr("fill", fillSmoke)

请参见
.attr
方法的第二个参数可以是一个函数,但它必须返回您要使用的颜色值。现在,您的函数只调用fillSmoke,但不返回任何值。通过将行更改为:

.attr("fill", function(d, i) { return fillSmoke(d,i); })
返回值需要return语句——只要fillSmoke返回所需的颜色值,该语句就可以工作。或者,这也可以工作:

.attr("fill", fillSmoke)

请参见

这是一个愚蠢的错误-函数应该定义为返回fillSmoke()结果,如下所示:

function(d,i){return(d,i)}


谢谢大家。

这是一个愚蠢的错误-函数应该定义为返回fillSmoke()结果,如下所示:

function(d,i){return(d,i)}


谢谢大家。

您缺少
return
…D'oh!谢谢。您缺少
return
…D'oh!谢谢。“现在您的函数只调用fillSmoke,但不返回任何值”…这是不正确的,JS中的所有函数都返回一个值。在这种情况下,它是
未定义的
。正如一些海报所指出的,我需要将
return
添加到函数体中…谢谢!“现在您的函数只调用fillSmoke,但不返回值”…这是不正确的,JS中的所有函数都返回一个值。在这种情况下,它是
未定义的
。正如一些海报所指出的,我需要将
返回
添加到函数体中…谢谢!