2015-10-01 3 views
0

Я новичок в D3 и JS и попытаюсь понять, как вызвать функцию с несколькими параметрами на объекте данных в D3. Ниже моей попытки. Вопрос в том, как я могу сделать работу версии 2?Вызов функции с несколькими параметрами в объекте данных в D3

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; 
} 
+0

Похоже, что она должна работать. Не могли бы вы представить полный пример, который воспроизводит проблему, пожалуйста? –

ответ

0

Код работает, если вы удаляете версию 1 и оставляете версию 2 отдельно. Основная причина этой линии в версии 1:

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

Обратите внимание на знак плюс +. Он преобразует результат замены из типа String в Number. Очевидно, Number не имеет функции replace, поэтому вы получили ошибку в версии 2.

+0

Да! Вы правы, это работает после того, как я удалил версию 1, спасибо! – Mirko

Смежные вопросы