在D3中对数据对象调用带有多个参数的函数

Call a function with multiple parameters on a data object in D3

本文关键字:参数 函数 调用 D3 数据 对象      更新时间:2023-09-26

我是D3和JS的新手,并试图理解如何在D3中调用具有多个参数的函数。低于我的尝试。问题是我如何让版本2工作?

d3.csv(input_file, function(data) {
    var metric = "foo";
    // Version 1:
    // clean number format. works fine
    data.forEach(function(d) {
        d[metric] = +d[metric].replace(/,/g,''); //remove thousand separator
        return d;
    });
    //Version 2:
    // this doesn't work. why not?
    // [Error] TypeError: undefined is not a function (evaluating 'd[metric].replace(/,/g,'')')
        data.forEach(function(d) {
          return cleanNumberFormat(d, metric);
        });
    // ...
});
// define a function to be used in several places
function cleanNumberFormat(d, metric) {
    d[metric] = +d[metric].replace(/,/g,''); //remove thousand separator
    return d;
}

如果删除版本1而保留版本2,代码将正常工作。根本原因是版本1中的这一行:

d[metric] = +d[metric].replace(/,/g,''); //remove thousand separator

注意加号+。将替换结果从String类型转换为Number类型。显然Number没有replace功能,所以你在版本2中得到了错误。