如何在需要 D3.js 中的对象的 d3.Threshold.range() 中使用 select 选项值(字符串)?

How to use select option value (string) inside a d3.Threshold.range() that needs an object in D3.js?

使用 d3.js 我得到一个 select 框的值并将它传递给 .scaleThreshold() 的 .range()。

这是 select 框:

<select id="color_scheme">
  <option value="d3.schemeOranges[7]">Orange</option>
<select>

这就是我获取 select 框值的方式:

var color_scheme = d3.select("#color_scheme").property("value");

这是色阶:

    const colorScale = d3.scaleThreshold()
        .domain([10, 100, 1000, 10000, 100000, 1000000])
        .range(color_scheme);

问题是在这种情况下 color_scheme 是一个字符串,它在 .range() 括号内不起作用。

如果你 console.log 它你只是收到字符串 d3.schemeOranges[7] 回来。

但是,当您将 var color_scheme 直接硬编码为 color_scheme = d3.schemeOranges[7] 时,它会起作用。

如果你 console.log 它你会收到预期的正确对象:

[
    "#fff5eb",
    "#fee6ce",
    "#fdd0a2",
    "#fdae6b",
    "#fd8d3c",
    "#f16913",
    "#d94801",
    "#a63603",
    "#7f2704"
]

所以问题是:我们如何让 select 值在 .range() 中正常工作?

我建议如下。将您的输入更改为:

<select id="color_scheme">
  <option value="schemeOranges">Orange</option>
<select>

然后在你的js中,使用字符串,数组是:

d3[color_scheme][7]