Javascript D3.js D3.max未定义

Javascript D3.js D3.max未定义,javascript,d3.js,Javascript,D3.js,这是我的第一个问题,我对奇妙的d3.js一无所知。 我尝试用一个包含12个对象和大量属性的geojson文件制作一个choropleth映射 我想通过d3.min和d3.max计算colorscale(quantize)的域,但一定是出了问题。min和max的值仍然没有定义(如果我相信我的webinspektor)。 域标记中的数字都可以正常工作 我希望有人能帮助我。谢谢你的回答 这是我的密码: d3.json("IKSK_LK_Goe_31463.json", function (collec

这是我的第一个问题,我对奇妙的d3.js一无所知。 我尝试用一个包含12个对象和大量属性的geojson文件制作一个choropleth映射

我想通过d3.min和d3.max计算colorscale(quantize)的域,但一定是出了问题。min和max的值仍然没有定义(如果我相信我的webinspektor)。 域标记中的数字都可以正常工作

我希望有人能帮助我。谢谢你的回答

这是我的密码:

d3.json("IKSK_LK_Goe_31463.json", function (collection) {




                overlay.afterAdd = function () {                    // Add the container when the overlay is added to the map.


                    color.domain([
                            //1,30
                            d3.min(collection, function(d) {return d.features.properties.EINWOHNER;}),
                            d3.max(collection, function(d) {return d.features.properties.EINWOHNER;})
                            ]); 
                            console.log(d3.max(collection, function(d) {return d.features.properties.EINWOHNER;}));

如果
d.features.properties.EINWOHNER
是一个整数值,或者您希望从中提取整数值(这就是最小值和最大值的意义),则在其前面添加一个
'+'
,如下所示:

    d3.min(collection, function(d) {return +d.features.properties.EINWOHNER;}),
    d3.max(collection, function(d) {return +d.features.properties.EINWOHNER;})]);

正如其他人提到的,d3.max的输入应该是一个数组。 确保输入不是object,若是,则使用d3.values(collection)创建一个值数组

祝你好运


/Wille

如其他人所述,在数值变量前面添加+可能会有所帮助

下面是一个非常简单的d3函数,用于获取min/max并将其用作域

d3.数据块(数组[,访问器]) 使用自然顺序返回给定数组中的最小值和最大值。这相当于同时调用d3.min和d3.max

因此,color.domain(d3.extent(…)也将正确设置域


希望它能有所帮助:)

使用类似以下内容:

var xx = [{x:'one',y:1}, {x:'two',y:2}]; //array
var maxOfY = d3.max(xx, function(d){ return d.y;});

你能发布一个JSFIDLE吗?您应该检查“集合”并查看其结构。您可能没有正确使用最小值/最大值。您希望传入一个对象数组,然后“d”表示数组中的每个元素。因此,如果您的属性位于“collection”中的“features”数组的元素上,您可以调用“d3.min(collection.features,function(d){return d.properties.EINWOHNER;})”谢谢您,您的答案是正确的。你让我的一天(在三天的头痛之后:-)也值得注意的是d3.extent()函数,它以数组的形式返回数据的最小值和最大值,因此可以直接输入域。您使用它的方式与使用min和max的方式相同,它只是取代了同时使用两者的需要。
var xx = [{x:'one',y:1}, {x:'two',y:2}]; //array
var maxOfY = d3.max(xx, function(d){ return d.y;});