javascript 将对象转换为数组

标签 javascript arrays csv d3.js javascript-objects

我正在尝试从 CSV 数据集构建 d3.js 热图。使用 d3.csv 导入后,数据如下所示:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, columns: Array(11)]

其中每个对象如下:

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"}

我一直在尝试按原样使用数据,但 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] 

如何将对象数组转换为数组数组?或者,有没有办法成功使用对象数组?另外,是否有任何原因导致它不直接来自数组数组中的 CSV,而不是这个奇怪的对象数组?数据是在 Python 的 Pandas 中管理和导出的,如果有影响,我们可以在那里进行调整。

谢谢。

最佳答案

这对于使用 Array.prototype.map 的函数式风格来说非常简单。 :

let myArray = Object
    .keys(myObj)
    .map(key => myObj[key]);

尽管您可能希望保证键按顺序显示并排除非数字键。

let myArray = Object
    .keys(myObj)
    .sort((a,b) => +a - +b)
    .filter(key => !isNaN(+key))
    .map(key => myObj[key]);

您可以依次将其与映射一起使用,将其应用到父数组

let newArray = bigArray
    .map(el => Object
        .keys(el)
        /* ... */
        .map(key => el[key]));

关于javascript 将对象转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44487616/

相关文章:

javascript - 在 "react"渲染中使用迭代语句创建表

python - 在 csv 文件中搜索列表值并在 python 中返回其他列值

c++ - 从(csv)的测试文件中读取并存储到房间对象中

javascript - 替换/限制 CKEDITOR 中的非标准字符

javascript - 单击时调用变量函数

c - 为什么我的数组的前一个元素会发生变化(C 中的字符串数组)

php - 如何从数组中过滤特定值?

javascript - JQuery:将 JSON 结果存储在 JavaScript 数组中?

Java:如何在 Unicode Normal Form C 中创建一个字符串

javascript - 触发 javascript 重定向后图像无法加载