如何在键值列表中找到内部元素的最大值?

How find max of an inner element in a list of key, values?

我有一个物品清单,如下所示。每年键的值是一个包含 10 个项目的列表,但为简短起见,我只显示其中的前几个。我怎样才能找到所有内部“计数”值的最大值?我研究了各种方法,但 none 到目前为止一直有效,也许我在这里遗漏了一些东西。例如,我真的很喜欢这里的一些衬垫,但它们不适合我 enter link description here

只是为了澄清数据是 csv 文件嵌套的结果,它意味着在 d3 图表中使用,最好不要导入标准库以外的库。

data = [
         {'2015': values: [{key: '0', value: {count: 45}},{key: '1', value: {count: 3}}, ... ]},
         {'2016': values: [{key: '0', value: {count: 67}},{key: '1', value: {count: 0}}, ... ]},
     {'2017': values: [{key: '0', value: {count: 12}},{key: '1', value: {count: 8}}, ... ]}
        ]

为了更好地展示数据的样子,这里是屏幕截图,以帮助澄清问题。

像这样的东西应该可以工作

const myData = [
  { key: "2015", values: [10, 5, 4, 3, 2, 1, 0] },
  { key: "2015", values: [10, 5, 4, 3, 2, 1, 0] },
  { key: "2015", values: [10, 5, 4, 3, 2, 1, 0] },
  { key: "2015", values: [100, 5, 4, 3, 2, 1, 0] },
  { key: "2015", values: [10, 5, 4, 3, 2, 1, 0] },
]

const maxValue = (data) => {

  // Setting an initial value to the lowest possible value in Javascript
  let max = Number.MIN_VALUE;

  // Iterate over each object in your array of data
  data.forEach(({values}) => {

    // Destructure the values from each object and then iterate over those
    values.forEach(value => {

      // Set the max to the higher over the current max or current value
      max = Math.max(max, value);
    })
  })

  // Return the max
  return max;
}

console.log(maxValue(myData))

我们在这里所做的是迭代初始数组中的每个对象。然后遍历跟踪当前最大值的值。

您可以像这样解构对象,方法是展平值数组,然后映射以获取计数变量。

var data = [
         {"key":"2015", "values": [{"key": 0, "value": {"count": 45}},{"key": 1, "value": {"count": 3}}]},{"key":"2016", "values": [{"key": 0, "value": {"count": 67}},{"key": 1, "value": {"count": 0}}]},{"key": "2017", "values": [{"key": 0, "value": {"count": 12}},{"key": 1, "value": {"count": 8}}]}
   ]
   
   
  var num = Math.max(... data.map(d=>d.values).flat().map(v=>v.value.count))
  console.log(num)

您的数据结构似乎不正确。你不能有 { '2015': values: [...] }。这相当于 { KEY: VALUE: VALUE}。浏览器似乎从您的代码中推断出含义并从中创建对象,但这是不对的。

你可以做一个对象的对象并命名内部对象,像这样:

data = {
    2015: {
        values: [
            { key: "0", value: { count: 45 } },
            { key: "1", value: { count: 3 } },
        ],
    },
    2016: {
        values: [
            { key: "0", value: { count: 67 } },
            { key: "1", value: { count: 0 } },
        ],
    },
    2017: {
        values: [
            { key: "0", value: { count: 12 } },
            { key: "1", value: { count: 8 } },
        ],
    },
};

或者您可以创建一个对象数组,如下所示:

data = [
    {
        year: 2015,
        values: [
            { key: "0", value: { count: 45 } },
            { key: "1", value: { count: 3 } },
        ],
    },
    {
        year: 2016,
        values: [
            { key: "0", value: { count: 67 } },
            { key: "1", value: { count: 0 } },
        ],
    },
    {
        year: 2017,
        values: [
            { key: "0", value: { count: 12 } },
            { key: "1", value: { count: 8 } },
        ],
    },
];

如何获得最高的 count 属性 取决于您使用的数据结构。

使用对象数组,我会这样处理问题:

// create a temp storage array to store "count" property of each
const countArray = [];

// iterate through the outer objects
for (const outerObject of data) {
    
    // iterate through the objects that are in the "values" array
    for (const innerObject of outerObject.values) {
        
        // push the "count" value to the array
        countArray.push(innerObject.value.count)
    }
}

// sort the array in place, with highest values first
countArray.sort((a, b) => b - a);

// display the result
console.log(countArray[0])

您可以为 object-of-objects 数据结构做类似的事情,但您需要不同的语法。