d3.max 个对象数组

d3.max of an array of objects

我有一个这样的对象数组,我想在这个对象数组中找到最大值 (5.7)。

我试过 d3.max(data) 但它只有 returns 第一个值。我想我可能需要将这个对象数组转换为值列表而不是工作?我不知道该怎么做。

let data =
[{2017: 5.2},
{2018: 5.7},
{2019: 5.1},
{2020: 4.8},
{2021: 0}]

谢谢。

习惯上,对于 D3,您可能希望使用公用键,例如:

{ year: 2017, value: 5.2 }

但是,在您这里的特定情况下,您仍然可以使用 d3.max,您只需要使用一个访问器函数来处理数组中每个对象的动态对象键:

let data =
[{2017: 5.2},
{2018: 5.7},
{2019: 5.1},
{2020: 4.8},
{2021: 0}];


let max = d3.max(data, function(datum) {
   return datum[Object.keys(datum)[0]]
});

console.log(max);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

如前所述,通常您可能希望在单个对象中分离年份和相关值,您可以这样做:

let data =
[{2017: 5.2},
{2018: 5.7},
{2019: 5.1},
{2020: 4.8},
{2021: 0}];

data = data.map(function(datum) {
  let year = Object.keys(datum)[0];
  let value = datum[year];
  return { year, value }
});

console.log(data);

现在您可以比其他方式更容易找到年份和值的范围,例如:d3.max(data, d=>d.year)d3.max(data,d=>d.value)