2016-06-25 2 views
-1

У меня есть массив с узлами и ребрами внутри ребер, каждый из которых имеет источник, цель, массив офицеров, и я бы хотел создать шкалу длин офицерских массивов.Найти максимальную длину вложенного массива

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

Символ * * массив является не массив, а объект, и он искажен. Части с ', 'MOYO, Dambisa Felicia, Dr"]}, 'и' ", офицеры": ["GODBEHERE, Ann Frances, M"]}, делают JSON недействительным. – trincot

+0

@ trincot, который является моим плохим, объект в порядке, я просто удалил некоторые данные, чтобы не размещать здесь огромный объект. – Higeath

ответ

3

Firsth вещь первое, что ваши данные не действительны. Недействительные жетоны есть, некоторые внутренние объекты отсутствуют { и т. Д.

Однако вы можете пропустить все массивы офицеров, а затем найти максимальную длину. Надеюсь, вы знаете, как создать масштаб, то есть для вас.

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.map и Math.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)); 
+0

нет способа достичь этого с помощью d3.max? – Higeath

+0

Я обновил свой ответ, надеюсь, это то, о чем вы просите –

Смежные вопросы