2016-12-19 19 views
1

配列の各要素(最高裁判所最高裁判所代表)には、データポイントの配列(Chief Justiceの名前、紛争の数、年)が含まれています。d3jsを使用して配列の配列を並べ替え

最上位配列の各要素について、下位配列を年ごとに昇順にソートする必要があります。

私は、次を使用して昇順に並べ替える年をしようとした:

nested_data.forEach(function(d) { 
    d.values.sort(d3.ascending(d.values.year)); 
    }); 

しかし、それは年によって昇順で低レベルの配列をソートしませんでした。

ここでは、構造を示すネストされたデータのconsole.logです。

Array[5] 
    0:Object 
    key:"Vinson" 
    values:Array[7] 
     0:Object 
     chief:"Vinson" 
     disputes:142 
     year:Tue Jan 01 1946 00:00:00 GMT+0800 (CST) 
     1:Object 
     2:Object 
     3:Object 
     4:Object 
     5:Object 
     6:Object 
    1:Object 
    key:"Warren" 
    values:Array[16] 
    2:Object 
    key:"Burger" 
    values:Array[17] 
    3:Object 
    key:"Rehnquist" 
    values:Array[19] 
    4:Object 
    key:"Roberts" 
    values:Array[11] 

低レベルの配列を年単位でソートするにはどうすればよいですか?

答えて

2

これは、関数である:あなたがvalues配列をソートしているので、あなたがcompareFunctionvaluesを繰り返す必要はありません

  1. nested_data.forEach(function(d) { 
        d.values.sort(function(a, b) { 
         return d3.ascending(+a.year, +b.year) 
        }); 
    }); 
    

    あなたの本来の機能は二つの問題がありました

  2. compareFunctionが指定されている場合、通常はabという2つのパラメータが使用されます。 d3.ascendingcompareFunctionの中に入れなければなりません。見てくださいhere

ここでは、偽のデータとデモです:

var data = [{ 
 
     key: "foo", 
 
     values: [{ 
 
      chief: "Bob", 
 
      year: 1982 
 
     }, { 
 
      chief: "Tom", 
 
      year: 1977 
 
     }, { 
 
      chief: "Carla", 
 
      year: 2010 
 
     }, { 
 
      chief: "Ana", 
 
      year: 1999 
 
     }] 
 
    }, { 
 
     key: "bar", 
 
     values: [{ 
 
      chief: "Bill", 
 
      year: 2009 
 
     }, { 
 
      chief: "Ted", 
 
      year: 2014 
 
     }] 
 
    }, { 
 
     key: "baz", 
 
     values: [{ 
 
      chief: "Fred", 
 
      year: 1998 
 
     }, { 
 
      chief: "Su", 
 
      year: 1992 
 
     }, { 
 
      chief: "Charlie", 
 
      year: 1999 
 
     }, { 
 
      chief: "Alice", 
 
      year: 1979 
 
     }] 
 
    }, ]; 
 

 
    data.forEach(function(d) { 
 
     d.values.sort(function(a, b) { 
 
      return d3.ascending(+a.year, +b.year) 
 
     }); 
 
    }); 
 

 
    console.log(data);
<script src="https://d3js.org/d3.v4.min.js"></script>

関連する問題