如何在键值列表中找到内部元素的最大值?
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 数据结构做类似的事情,但您需要不同的语法。
我有一个物品清单,如下所示。每年键的值是一个包含 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 数据结构做类似的事情,但您需要不同的语法。