我在使用D3.js.nest()和.roll up()从我的数据数组获取一致的退货/订单时遇到了问题.当使用新名称或类似名称更新数组时,正确的编号帐户是正确的,但我无法设置从最近添加的名称到添加的姓氏的顺序.当添加一个新名称或添加另一个类似名称时,我会得到一个随机顺序.下面是我最近回报的一个例子.我正在寻求实现的顺序是从下到上的固定顺序(反向顺序)显示;即,字段8、字段7、字段6、字段5……字段1.我提供了我的代码的一个示例.我希望这一咨询请求是有意义的.下面是我的回答:

enter image description here

[{
    "num": 65,
    "value": "Field-1"
}, {
    "num": 64,
    "value": "Field-8"
}, {
    "num": 63,
    "value": "Field-7"
}, {
    "num": 62,
    "value": "Field-7"
}, {
    "num": 61,
    "value": "Field-8"
}, {
    "num": 60,
    "value": "Field-6"
}, {
    "num": 59,
    "value": "Field-6"
}, {
    "num": 58,
    "value": "Field-7"
}, {
    "num": 57,
    "value": "Field-8"
}, {
    "num": 56,
    "value": "Field-5"
}, {
    "num": 55,
    "value": "Field-4"
}, {
    "num": 54,
    "value": "Field-4"
}, {
    "num": 53,
    "value": "Field-4"
}, {
    "num": 52,
    "value": "Field-5"
}, {
    "num": 51,
    "value": "Field-3"
}, {
    "num": 50,
    "value": "Field-5"
}, {
    "num": 49,
    "value": "Field-5"
}, {
    "num": 48,
    "value": "Field-1"
}, {
    "num": 47,
    "value": "Field-5"
}, {
    "num": 46,
    "value": "Field-4"
}, {
    "num": 45,
    "value": "Field-4"
}, {
    "num": 44,
    "value": "Field-1"
}, {
    "num": 43,
    "value": "Field-5"
}, {
    "num": 42,
    "value": "Field-5"
}, {
    "num": 41,
    "value": "Field-3"
}, {
    "num": 40,
    "value": "Field-1"
}, {
    "num": 39,
    "value": "Field-5"
}, {
    "num": 38,
    "value": "Field-5"
}, {
    "num": 37,
    "value": "Field-5"
}, {
    "num": 36,
    "value": "Field-5"
}, {
    "num": 35,
    "value": "Field-4"
}, {
    "num": 34,
    "value": "Field-1"
}, {
    "num": 33,
    "value": "Field-3"
}, {
    "num": 32,
    "value": "Field-2"
}, {
    "num": 31,
    "value": "Field-5"
}, {
    "num": 30,
    "value": "Field-1"
}, {
    "num": 29,
    "value": "Field-1"
}, {
    "num": 28,
    "value": "Field-1"
}, {
    "num": 25,
    "value": "Field-1"
}, {
    "num": 24,
    "value": "Field-2"
}, {
    "num": 22,
    "value": "Field-2"
}, {
    "num": 21,
    "value": "Field-1"
}, {
    "num": 19,
    "value": "Field-4"
}, {
    "num": 17,
    "value": "Field-3"
}, {
    "num": 16,
    "value": "Field-3"
}, {
    "num": 15,
    "value": "Field-1"
}, {
    "num": 11,
    "value": "Field-2"
}, {
    "num": 10,
    "value": "Field-3"
}]



$(function () { 
    var chartData=getListData("ViewsTest");
    var data=[];
    
    for(var i=0;i<chartData.length;i++){
        data.push({"num":chartData[i].ID, "value":chartData[i].Views});
}
    
    initChart(data);
});

function initChart(chartData){
    
data = chartData;
    
var baseCount = d3.nest()
  .key(function(d) { return d.value; })
  .rollup(function(v) { return v.length; })
  .entries(data);

for(var i =1; i<=  baseCount.length; i++){
  $('.vCount').append($('<div/>', { id: 'r' + i, 'class' : 'ansbox'}))
}

var mainDiv = d3.select("body")
  .attr("id", "main");
  
mainDiv.selectAll(".ansbox")
    .data(baseCount)
    .append("div")
    .attr("class", function(d,i) { return  "views"})
    .html(function (d) { return d.key + " : " + d.values ; });
}

推荐答案

能看到你的数据就太好了.不过,通常情况下,d3.nest会按照它在数据中找到的顺序生成密钥.例如,如果数据如下所示:

let data = [
  { key: 2, value: "red" },
  { key: 1, value: "yellow" },
  { key: 2, value: "blue" }
]

你在key上筑巢,然后你会得到一个像这样的数组

[
  {key: 2, values: ...},
  {key: 1, values: ...}
]

当然,您始终可以对数组进行排序.这里有一个例子.

let data = [
  { key: 2, value: "red" },
  { key: 1, value: "yellow" },
  { key: 2, value: "blue" }
];

let nested = d3
  .nest()
  .key((o) => o.key)
  .entries(data)

let div = d3.select('#v5')
div.append('h3').style('margin', '10px').text('Unsorted')


let table = div.append('table')
let head = table.append('tr')
head.append('th').text('Field')
head.append('th').text('Count')
nested.forEach(function(d) {
  let tr = table.append('tr');
  tr.append('td').text(`Field-${d.key}`)
  tr.append('td').text(`${d.values.length}`)
});

div.append('h3').style('margin', '10px').text('Now sort')

nested.sort((a, b) => (a.key < b.key ? -1 : 1))
  
let table2 = div.append('table')
let head2 = table2.append('tr')
head2.append('th').text('Field')
head2.append('th').text('Count')
nested.forEach(function(d) {
  let tr = table2.append('tr');
  tr.append('td').text(`Field-${d.key}`)
  tr.append('td').text(`${d.values.length}`)
})
table {
  border-collapse: collapse;
}

th, td {
  border-bottom: solid 1px black;
  padding: 3px;
  text-align: center;
}
th:first-child, td:first-child {
  border-right: solid 1px black
}
<script src="https://d3js.org/d3.v5.min.js"></script>
<div id="v5"></div>

话虽如此,值得指出的是,d3.nest已被弃用,取而代之的是d3.groupd3.rollup.你可能会看一下V6 Migration Guide美元.

Javascript相关问答推荐

为什么我达到了时间限制!?LeetCode链接列表循环(已解决,但需要解释!)

如何在不分配整个数组的情况下修改包含数组的行为主体?

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

我应该绑定不影响状态的函数吗?'

Msgraph用户邀请自定义邮箱模板

更改JSON中使用AJAX返回的图像的路径

如何将react—flanet map添加到remixjs应用程序

我正在建立一个基于文本的游戏在react ,我是从JS转换.我怎样才能使变量变呢?

Angular 订阅部分相互依赖并返回数组多个异步Http调用

Reaction Native中的范围滑块

如何在ASP.NET项目中使用Google Chart API JavaScript将二次轴线值格式化为百分比

OpenAI转录API错误请求

TypeError:无法读取未定义的属性(正在读取';宽度';)

为什么云存储中的文件不能公开使用?

ngOnChanges仅在第二次调用时才触发

FireBase FiRestore安全规则-嵌套对象的MapDiff

重新呈现-react -筛选数据过多

JavaScript&;Reaction-如何避免在不使用字典/对象的情况下出现地狱?

AG-GRIDreact 显示布尔值而不是复选框

固定动态、self 调整的优先级队列