Javascript d3修改列名

Javascript d3修改列名,javascript,csv,d3.js,Javascript,Csv,D3.js,我有一个tsv文件,正在使用以下代码进行解析: d3.tsv(file, function(error, data) { data.forEach(function(d) { d.NAME = d.NAME; d.logFC = d.logFC; d.logCPM = d.logCPM; d.FDR = d.FDR; d.PValue = d.PValue }); 我试图解释用户没有输入具有完全相同

我有一个tsv文件,正在使用以下代码进行解析:

d3.tsv(file, function(error, data) {
    data.forEach(function(d) {
        d.NAME = d.NAME;
        d.logFC = d.logFC;
        d.logCPM = d.logCPM;
        d.FDR = d.FDR;
        d.PValue = d.PValue
    });
我试图解释用户没有输入具有完全相同列名的文件的情况。更具体地说,我想说明列名是“Something.logFC”而不是“logFC”的情况。因此,我尝试通过以下操作修改列名:

d3.tsv(file, function(error, data) {
    data.forEach(function(d) {
        for (var i=0; i<d3.keys(d).length; i++){
            if(d3.keys(d)[i].indexOf('.') > -1){
                d3.keys(d)[i] = d3.keys(d)[i].split(".")[1];
            }
        };
        d.NAME = d.NAME;
        d.logFC = d.logFC;
        d.logCPM = d.logCPM;
        d.FDR = d.FDR;
        d.PValue = d.PValue
    });
d3.tsv(文件、函数(错误、数据){
data.forEach(函数(d){
对于(变量i=0;i-1){
d3.键(d)[i]=d3.键(d)[i]。拆分(“.”[1];
}
};
d、 NAME=d.NAME;
d、 logFC=d.logFC;
d、 logCPM=d.logCPM;
d、 FDR=d.FDR;
d、 PValue=d.PValue
});

但是,现在对于每个数据对象,新的列名中添加了未定义的值,而原始列名和值保持不变。

使用此函数定位列名中的点,并仅保留任何名称中有点的最后一部分:

function removeDot(d){
    Object.keys(d).forEach(function(origProp) {
        var noDot = origProp.split(".")[1];
        if (noDot != undefined) {
          d[noDot] = d[origProp];
          delete d[origProp];
        }
     });
     return d;
};
要使用此函数,请定义如下访问器:

d3.tsv(file, removeDot, function(error, data) {
    //all your code here
});

注意:请记住,只有
d3.csv
d3.tsv
接受访问器。

现在,您正在基于键创建一个变量并更改此变量,只是…d3没有使用该变量来获取对象。您必须更改实际的键。@GerardoFurtado我将我的问题更新为我认为会我会换钥匙,但不会。我怎么换实际的钥匙?我刚刚写了一个答案。