javascript将对象转换为数组

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中导出并导出的,如果这有所不同,我们可以在那里进行调整.

谢谢.

Bra*_*est 5

这很简单,功能风格使用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)