我正在使用最新版本的d3,需要获得JSON对象嵌套属性的最小值和最大值,如下所示:
const data =
{
"Item1":{
"Property1": "11",
"Property2": "12",
},
"Item2":{
"Property1": "21",
"Property2": "22",
}
}
要获得Property1
的最小值,我知道我不能直接在对象上使用d3.min
,所以我尝试先通过执行以下操作将其转换为数组:
const min = d3.min(d3.values(data, (d) => +d.Property1))
VScode告诉我没有错误,但在控制台上它告诉我"values"它不是一个函数。我该怎么办?
values等价于Object。值,它只接受一个参数,而我看到你传递了两个参数,所以这就是错误的原因。我已经为您做了一个示例片段来获取最小值,对于每个Item对象,您可以将其映射到索引为0的property1值(您可以通过使用d3.values再次执行此操作)。你得到了性质的最小值。注意:如果你不做下面的parseInt,你的数据将根据字符串给出最小值,即100将小于2(注意)
如果你有一个属性数组,可以用indexOf(propertyname)替换0 index来更好地回答这个问题。你可以试试。
更新:d3。在d3v7中不支持values,所以使用Object。值而不是
const data =
{
"Item1":{
"Property1": "151",
"Property2": "12",
},
"Item2":{
"Property1": "21",
"Property2": "22",
},
"Item3":{
"Property1": "12",
"Property2": "452",
},
"Item4":{
"Property1": "100",
"Property2": "4",
}
}
const min = d3.min(Object.values(data).map(function(d) {
return parseInt(Object.values(d)[0]);}));
console.log(min);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.4.4/d3.min.js" integrity="sha512-hnFpvCiJ8Fr1lYLqcw6wLgFUOEZ89kWCkO+cEekwcWPIPKyknKV1eZmSSG3UxXfsSuf+z/SgmiYB1zFOg3l2UQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>