我有一个数组,其中数组中的每个元素(代表最高法院首席大法官)都包含一系列数据点(首席大法官的姓名,争议数量和年份)。
对于顶级数组中的每个元素,我需要按年份按升序对较低级别数组进行排序。
我尝试使用以下方法按升序排序年份:
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]
如何按年份按升序对较低级别数组进行排序?
答案 0 :(得分:2)
这是功能:
nested_data.forEach(function(d) {
d.values.sort(function(a, b) {
return d3.ascending(+a.year, +b.year)
});
});
您的原始功能有两个问题:
values
数组进行排序,因此无需在values
compareFunction
compareFunction
使用两个参数,通常名为a
和b
。您必须将d3.ascending
放在compareFunction
内。看看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>