2013-04-17 120 views
9

如何使用d3.map()從以下數組中獲取[10, 12]d3.js:如何使用map函數?

var mydata = [ 
    { '__data__' : 10 }, 
    {'__data__' : 12 } 
]; 

我一直在嘗試這一點,但它不工作:

var mymap = d3.map(mydata, function(d) { 
    return d.__data__; 
}); 

回答

8

你不能 - d3.map()不是跨越陣列映射功能,但對於哈希墊片。簡而言之,雖然對象可以像散列一樣使用,但有時會出現意想不到的行爲。一個新的Javascript標準爲此提出瞭解決方案,並且在實施之前,d3.map()可以用於相同的效果。

更多信息請訪問the documentation

+0

關於如何按照他的例子得到[10,12]的建議? – helixmat

+3

您可以簡單地執行'mydata.map(function(d){return d .__ data;})'。 –

3

.map()只是創建了另一個數組,它遍歷了你給它的任何東西,並執行你在舊數組中每個元素上定義的函數,然後變成新數組。

所以,如果我想在一個陣列上執行的所有元素的單一操作,並作出新的陣列出來的,我會使用.MAP()

例如,我需要看到的東西表示爲百分比,當我從/ proc/loadavg獲得的數據給我的數字爲0.28,0.03,1.0,0.97,0.04等每5-15分鐘負載平均等。但我還需要在我的計算中運行nproc的輸出,並且nproc會給我多少內核分配哪些內容。所以我創建一個數組,每一次的/ proc/loadavg給了我一個新值,我把每一個新的值到一個數組...

這將是您的初始數據:

var data = [0.28,0.03,1.0,0.97,0.04]; 
var dataSize = 5; 

這可能是該功能使用適用於所有指標的原始數據數組:

percent = function() { 
     return (loadval/(numCores*100)); 
    } 

這將是它映射到一個新的數組與轉化值:

data = d3.range(dataSize).map(percent);