2016-06-07 140 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