2013-10-07 73 views
1

我做了一個多線圖,我想管理空值。 我有2種空值「」和「」 所以我用這個來映射CSVd3 line.defined不繪製零值

var column = color.domain().map(function(name) { 
    return { 
    name: name, 
    values: data.map(function(d) { 
     if(d[name] === '' || d[name] === ' '){ 
     //if the data is empty I store it in d.vale as a string 
     return {name: name, id: d.id, value: d[name]}; 
     } 
     else{ 
     //if the value is not empty I store it in d.value as number and replacing the coma with a dot (replacedot function) 
     return {name: name, id: d.id, value: +replace(replacedot(d[name]))}; 
     } 

    }) 
    }; 
}); 

比內line.defined我檢查,如果d.vale不是字符串,如果沒有我回到它:

var line = d3.svg.line() 
.defined(function(d) { if(typeof d.value !== 'string'){ return d.value;}}) 

這項工作很好逃脫空值,但如果在它逃到數據集0.0的值...

我怎樣才能解決這個問題?

感謝 丹尼爾

+1

您試過'.defined(function(d){return(typeof d.value!=='string ');})'? –

+0

好吧,這工作正常!但爲什麼我的代碼不起作用?我沒有看到太多差異,我不明白爲什麼我的更詳細的代碼不起作用。這取決於defined()的實現嗎? – danipen

+0

你應該返回true/false。你的代碼返回一個數字或者什麼也沒有(技術上爲空,它被解釋爲0)。 –

回答

3

.defined函數應該返回真/假取決於該行是否被定義或沒有。您當前的函數不會返回任何值或值。明確地返回true/false比依靠正確解釋返回值更安全,即使用

.defined(function(d) { return (typeof d.value !== 'string'); })