【问题标题】:Find maximum length of an nested array查找嵌套数组的最大长度
【发布时间】:2016-06-25 15:36:21
【问题描述】:

我有一个数组,其中的节点和边在边内,每个节点都有源、目标、军官数组,我想创建一个军官数组长度的比例。

  var officersScale = d3.scale.linear()
                                        .domain([1,  d3.max(dataset.edges.officers.length, function(d) { return d[0]; })])
                                        .range([1,10]);

数组的样子:

var dataset = {"nodes":[{"name":"Anglo American plc"},{"name":"Associated British Foods plc"},{"name":"Admiral Group plc"},{"name":"ARM Holdings plc"},{"name":"Aviva plc"},{"name":"BAE Systems plc"},{"name":"Barclays PLC"},{"name":"British American Tobacco p.l.c."},{"name":"The Berkeley Group Holdings plc"},{"name":"BHP Billiton plc"},{"name":"BP p.l.c."},{"name":"BT Group plc"},{"name":"Centrica plc"},{"name":"Compass Group PLC"},{"name":"Direct Line Insurance Group PLC"},{"name":"easyJet plc"},{"name":"International Consolidated Airlines Group, S.A."},{"name":"3i Group plc"},{"name":"Intertek Group plc"},{"name":"Lloyds Banking Group plc"},{"name":"Merlin Entertainments plc"},{"name":"Pearson plc"},{"name":"Reckitt Benckiser Group plc"},{"name":"Royal Dutch Shell plc"},{"name":"Rexam PLC"},{"name":"Rio Tinto plc"},{"name":"SABMiller plc"},{"name":"Schroders plc"},{"name":"Standard Life plc"},{"name":"SSE plc"},{"name":"Standard Chartered PLC"},{"name":"Tesco PLC"},{"name":"Whitbread PLC"}],"edges":[{"source":0,"target":29,"officers":["MEDORI, Rene"]},{"source":0,"target":30,"officers":["GROTE, Byron Elmer"]},{"source":0,"target":31,"officers":["GROTE, Byron Elmer"]},{"source":1,"target":13,"officers":["BASON, John George"]}]};

【问题讨论】:

  • array 不是数组,而是对象,格式错误。 ,"MOYO, Dambisa Felicia, Dr"]},",officers":["GODBEHERE, Ann Frances, M"]}, 的部分使 JSON 无效。
  • @trincot 那是我的错,对象很好,我只是删除了一些数据,没有在这里发布一个巨大的对象。

标签: javascript arrays d3.js


【解决方案1】:

首先,您的数据无效。存在无效令牌,一些内部对象缺少{ 等。

但是,您可以遍历所有官员数组,然后找到最大长度。我希望你知道如何创造规模,这是给你的。

var edges = [{"source":0,"target":29,"officers":["MEDORI, Rene"]},
           {"source":6,"target":28,"officers":["GILLIES, Crawford Scott","GRIMSTONE, Gerald Edgar, Sir"]},
           {"source":9,"target":10,"officers":["ANDERSON, Paul Milton"]},
           {"source":9,"target":19,"officers":["FREW, Anita Margaret"]},
           {"source":9,"target":23,"officers":["BRINDED, Malcolm Arthur"]},
           {"source":15,"target":32,"officers":["KENNEDY, Christopher John"]},
           {"source":24,"target":31,"officers":["CHAMBERS, Stuart John"]},
           {"source":28,"target":29,"officers":["GILLIES, Crawford Scott"]},
           "source":30,"target":31,"officers":["GROTE, Byron Elmer"]}];

使用d3.max

var maxlength = d3.max(edges, function(d) { return d.officers.length; })

使用简单的Array.prototype.mapMath.max

var lengths = edges.map(function(edge){
     return edge.officers.length;
});

console.log(lengths);
var maxLength = Math.max(...lengths);

console.log(maxLength);

单步,ES6

maxLength = Math.max(...edges.map(edge=> edge.officers.length));

【讨论】:

  • 没有办法使用 d3.max 实现吗?
  • 我已经更新了我的答案,我希望这是你的要求
猜你喜欢
  • 2017-12-05
  • 2021-02-14
  • 2021-06-10
  • 1970-01-01
  • 2019-04-09
  • 2019-01-19
  • 2020-01-02
  • 2013-08-22
  • 2023-01-25
相关资源
最近更新 更多