javascript - d3- 在嵌套数组中查找最大键/值

标签 javascript arrays d3.js

我有一个包含 3 个嵌套数组的数组,每个数组包含 3 个对象。我使用什么 d3 语法来查找所有数据中 data1 的最大值?

是不是有点像,

function find_max(all_data, i){
    return d3.max(all_data[i].data1)
}

这是我的数据结构:

all_data = [
        [{data1:2, age:6},
         {data1:4, age:5},
         {data1:5, age:4}],

        [{data1:7, age:2},
         {data1:1, age:9},
         {data1:0, age:8}],

        [{data1:5, age:9},
         {data1:6, age:9},
         {data1:8, age:6}]
       ]

基本上,我希望它返回 8。感谢您的帮助!!我不太清楚。

最佳答案

我们可以混合使用 d3.maxArray.map操作:

d3.max(all_data.map(d => d3.max(d.map(n => n.data1)))) // 8

这会使用 d3.max 找到每个嵌套数组的最大值,并使用 map 操作将对象的嵌套数组转换为 的数组data1 值(第一个嵌套数组的 [2, 4, 5])。

[{data1:2, age:6}, {data1:4, age:5}, {data1:5, age:4}].map(n => n.data1) // [2, 4, 5]
d3.max([{data1:2, age:6}, {data1:4, age:5}, {data1:5, age:4}].map(n => n.data1)) // 5

对于每个子最大值,我们再次使用 d3.max 找到全局最大值。

var all_data = [
  [{data1:2, age:6},
    {data1:4, age:5},
    {data1:5, age:4}],

  [{data1:7, age:2},
    {data1:1, age:9},
    {data1:0, age:8}],

  [{data1:5, age:9},
    {data1:6, age:9},
    {data1:8, age:6}]
];

console.log(d3.max(all_data.map(d => d3.max(d.map(n => n.data1)))));
<script src="https://d3js.org/d3.v5.min.js"></script>


如果您对 flatMap 的概念感到满意,你也可以这样做:

d3.max(all_data.flatMap(d => d.map(n => n.data1))); // 8

但这需要为数组创建一个 flatMap 函数:

Array.prototype.flatMap = function(lambda) {
  return Array.prototype.concat.apply([], this.map(lambda));
};

flatMap 操作将嵌套列表展平:

all_data.flatMap(d => d.map(n => n.data1)) // [2, 4, 5, 7, 1, 0, 5, 6, 8]

最后,如果您想同时获得最大值和最小值,我们可以混合使用 Array.flatMapd3.extent。 :

var [min, max] = d3.extent(all_data.flatMap(d => d.map(n => n.data1)));

关于javascript - d3- 在嵌套数组中查找最大键/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51810621/

相关文章:

Javascript 函数在调用后会运行很长时间

javascript数组取消移位一些元素

javascript - 单个 html 文件或 javascript 文件中有多少 document.ready?

javascript - 如何简化 getter-setter 函数

javascript - 如何通过 D3 单击事件让 $rootScope.$emit() 和 ng-show 协同工作?

javascript JQuery 在页面加载时打印到多个 div?

Javascript 过滤函数不返回数组

javascript - 如何全局声明函数中的数组?

javascript - 使用 D3 动态选择数据源创建旭日图

C++ strcmp 数组