我遇到了与将数据从一种形式转换为另一种形式相关的编程问题。
我有一个对象数组,表示需要转换为可视化矩阵的数据表。我在教育期间以某种方式避免了覆盖矩阵数学,所以如果我的术语不正确,请道歉。
更具体地说,我有一个表示格式化数据的对象数组:
var pokes = [
{source: "Harry", target: "Maria", type: "poke"},
{source: "Brin", target: "Serge", type: "poke"},
{source: "Maria", target: "Brin", type: "poke"},
{source: "Serge", target: "Simon", type: "poke"},
{source: "Brin", target: "Serge", type: "poke"}
];
我需要把它变成一个方形矩阵,用于和弦图,例如:
var matrix = [
[0, 5, 2, 1, 4],
[7, 0, 8, 4, 7],
[9, 4, 0, 3, 1],
[8, 5, 5, 0, 8],
[6, 3, 9, 2, 0]
];
结果矩阵的长度/宽度n等于数组中唯一个体的数量(Harry,Serge等),相应单元格中的值(x,y)是person x的次数戳人y。 pokes数组中的每个对象代表一个poke(“type”属性不影响矩阵的构造)。
所以,例如,对象:
{source: "Brin", target: "Serge", type: "poke"}
会向代表的单元格添加1(Brin,Serge)。
这是我的伪代码方法:
Create array, people, containing list of unique people in pokes (both source and target).
Create empty array, matrix.
For each person in people:
Create an array, foo, of size people.length.
For each poke in pokes:
If person == poke.source:
Add 1 to foo[x] where x is the index of poke.target in people.
Push foo into matrix.
我还没有进入真正的代码,因为我不确定这个方法是:
任何建议都将受到赞赏;特别是如果d3.js有一个隐藏的方法来创建我没有发现的矩阵。