Javascript 基于JSON响应的d3列排序规则

Javascript 基于JSON响应的d3列排序规则,javascript,json,d3.js,Javascript,Json,D3.js,我有一个d3函数,它根据数据的JSON输出生成一个表 function tabulate(data, columns) { $("body").css("padding-top", "10px") var table = d3.select('#response').append('table').attr('class', 'table table-bordered table-hover') var thead = table.append('thead') var tbody = tabl

我有一个d3函数,它根据数据的JSON输出生成一个表

function tabulate(data, columns) {
$("body").css("padding-top", "10px")
var table = d3.select('#response').append('table').attr('class', 'table table-bordered table-hover')
var thead = table.append('thead')
var tbody = table.append('tbody');

thead.append("tr")
    .selectAll("th")
    .data(columns).enter()
    .append("th")
    .text(function(column) {
        return column;
    });

var rows = tbody.selectAll('tr')
    .data(data)
    .enter()
    .append('tr');
console.log("rows: " + rows)
var cells = rows.selectAll('td')
    .data(function(row) {
        return columns.map(function(column) {
            return {
                column : column,
                value : row[column]
            };
        });
    })
    .enter()
    .append('td')
    .text(function(d) {
        return d.value;
    });
return table;
}
数据响应因输入而异,但输出中的一个常见字段是“Count”,我希望该字段始终追加到表的最后一个。当前,它根据数据的顺序显示在表上

示例数据集:

data: [{"Cars":"Mercedes","Count":281,"Type":"Automatic"},
      {"Cars":"Toyota","Count":1929,"Type":"Manuel"}]
我可以补充一些逻辑吗 1.收到回复 2.追加表时始终将“Count”设置为最后一列


谢谢你的帮助

看起来您正在将一个数组列传递给制表函数,在填充行之前,您可以根据该函数组织数据。你从哪儿弄来的

根据您的评论,columns数组中的值是动态的,可以包含任何内容。我们可以在这里查找count头,删除它,然后将其添加到末尾。这样,我们就可以按照我们想要的方式获得标题,并相应地生成表。检查下面的代码段:

风险值数据=[{ 汽车:梅赛德斯, 总数:281, 类型:自动 }, { 汽车:丰田, 计数:1929, 类型:曼纽尔 }]; /计数位于中间的情况 变量列=[Cars,Count,Type]; //一些基本的数组操作将其从中间移除并放在最后 变量位置=columns.indexOfCount; ifposition!=-1{columns.position,1;} 列。pushCount; 函数tabletedata,列{ //$body.csspadding-top,10px var table=d3。选择“响应”。追加“表格”。attr“类”,“表格边框表格悬停” var thead=table.append'thead' var tbody=表。追加'tbody'; 附录 .选择全部 .datacolumns.enter .附件 .textfunctioncolumn{ 返回列; }; 变量行=tbody。选择所有'tr' .数据 进来 .附加“tr”; console.logrows:+rows 变量单元格=行。选择所有'td' .datafunctionrow{ return columns.mapfunctioncolumn{ 返回{ 专栏:专栏, 值:行[列] }; }; } 进来 .附加'td' .textfunctiond{ 返回d值; }; 返回表; } 表格数据,列;
你好谢谢你的帮助!数据来自基于post请求的API输出。因此,列的数组是动态的,可以根据请求进行更改。。。我提供的数组就是一个例子,但是列计数与所有可能的列都是一致的,所以我试着看看如何处理将计数保留在任何一组数组列的末尾。@DanielTesfaye检查我的编辑。现在,它基本上在头中搜索count,然后将其放在columns数组的末尾,从而相应地生成表。