2016-06-07 182 views
1

我有下面的代碼的結果減少的Javascript子陣列單陣列

d3.csv("../hello.csv", function(data) { 
    console.log(data); 
    var usable = data.map(function (d) { 
     return {  
      description: d.description.split(" ") 
     }; 
    }); 
    console.log(usable); 
}); 

可用的控制檯日誌[object, object, object]當我展開它是

0:Object 
    description: Array[3] 
    0 : "A" 
    1 : "B" 
    2 : "C" 

1:Object 
    description: Array[3] 
    0 : "D" 
    1 : "E" 
    2 : "FG" 

2:Object 
    description: Array[5] 
    0 : "AD" 
    1 : "BD" 
    2 : "DC" 
    4 : "HH" 

我需要的是單陣列如下:

[A,B,C,D,E,FG,AD,BD,DC,HH] 

將所有元素簡化爲單個數組而不是 多。

我該如何做到這一點?任何幫助將不勝感激。

+0

你應該能夠推動(http://www.w3schools.com/jsref/jsref_push.asp)一個數組中的元素到另一個或合併( http://www.w3schools.com/jsref/jsref_concat_array.asp)D3的兩個外部使用它 –

回答

1

爲什麼不:

d3.csv("../hello.csv", function(data) { 
    console.log(data); 
    var all = []; 
    data.map(function (d) { 
     Array.prototype.push.apply(all, d.description.split(" ")); 
    }); 
    console.log(all); 
}); 
+0

這正是我會給的建議,確保你標記這是正確的答案,如果它解決了你的問題。 =) – njfife

+0

謝謝;這很簡單並且有效。 – Jans

+0

@Jans:很高興聽到你可以接受我的回答,如果確實幫助你:) –

2

您可以使用D3.merge()將陣列弄平。假設這些都是你的對象:

var obj1 = {description: [1,2,3]} 
var obj2 = {description: [10,20,30,40]}; 
var obj3 = {description: [100,200,300,400,500]}; 

var array = [obj1, obj2, obj3]; // your array 

因此,這會產生你所描述的輸出:

console.log("array", array); 

您可以使用d3.merge(array)幾個陣列合併成一個:

var flattened = d3.merge([obj1.description, obj2.description, obj3.description]); 
console.log("flattened", flattened); 

它會打印:

flattened [1, 2, 3, 10, 20, 30, 40, 100, 200, 300, 400, 500] 

請參閱:JSFiddle