K H*_*tch 2 javascript csv arrays javascript-objects d3.js
我正在尝试从CSV数据集构建d3.js热图.使用d3.csv导入后,数据如下所示:
[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, columns: Array(11)]
Run Code Online (Sandbox Code Playgroud)
每个对象的位置如下:
Object {0: "0.934999642", 1: "0.1031451091", 2: "0.077435557", 3:
"0.129644215", 4: "0.666245944", 5: "0.133087829", 6: "0.113218775", 7:
"0.120796943", 8: "0.257501418", 9: "0.840916491", "": "0"}
Run Code Online (Sandbox Code Playgroud)
我一直在尝试按原样使用数据,但是for循环太慢(真实数据集有1300个值),并且尝试嵌套结构不起作用,因为d3的data()函数只能接受数组.
像这样:
var row = svg.selectAll(".rows")
.data(data)
.enter()
.append("rect")
[etc]
d3.selectAll(".blocks")//nested data
.data(function(d) {//d has no length property, so this line fails
return d;
})
.enter()
.append("rect")
[etc]
Run Code Online (Sandbox Code Playgroud)
如何将对象数组转换为数组数组?或者,有没有办法成功使用对象数组?另外,有没有理由说它不是直接来自数组数组中的CSV而不是这个奇怪的对象数组?数据是在Python的Pandas中导出并导出的,如果这有所不同,我们可以在那里进行调整.
谢谢.
这很简单,功能风格使用Array.prototype.map:
let myArray = Object
.keys(myObj)
.map(key => myObj[key]);
Run Code Online (Sandbox Code Playgroud)
虽然您可能希望保证按键按顺序显示并排除非数字键.
let myArray = Object
.keys(myObj)
.sort((a,b) => +a - +b)
.filter(key => !isNaN(+key))
.map(key => myObj[key]);
Run Code Online (Sandbox Code Playgroud)
您可以通过map将其用于将其应用于父数组
let newArray = bigArray
.map(el => Object
.keys(el)
/* ... */
.map(key => el[key]));
Run Code Online (Sandbox Code Playgroud)