2016-06-25 15 views
-1

ノードとエッジの内側にそれぞれソース、ターゲット、役員の配列を持つ配列があり、役員配列の長さの尺度を作成したいと考えています。ネストされた配列の最大長の検索

のように、配列がどのように見えるか
var officersScale = d3.scale.linear() 
             .domain([1, d3.max(dataset.edges.officers.length, function(d) { return d[0]; })]) 
             .range([1,10]); 

:Firsth事はまず、あなたのデータが有効でない

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"]}]}; 
+0

*配列*です配列ではなくオブジェクトであり、不正な形式です。 MOONO、Dambisa Felicia、Dr "]}、" and officers ":[" GODBEHERE、Ann Frances、M "]}のパーツはJSONを無効にします。 – trincot

+0

@trincotそれは私の悪いオブジェクトです。私はちょうどここに大きなオブジェクトを投稿しないようにいくつかのデータを削除しました。 – Higeath

答えて

3

。無効なトークンがあり、一部の内部オブジェクトには、{などがありません。

ただし、すべての役員配列をループして最大長を見つけることができます。私はあなたがスケールを作成する方法を知っていればいいと思います。簡単Array.prototype.mapと単一工程で

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

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

console.log(maxLength); 

Math.maxを使用d3.max

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

使用

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"]}]; 

ES6

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

d3.maxを使用してそれを達成する方法はありませんか? – Higeath

+0

私は私の答えを更新しました、これはあなたが求めていることを願っています –

関連する問題