Javascript 计算共现率的更有效方法

Javascript 计算共现率的更有效方法,javascript,arrays,Javascript,Arrays,我想把人与人之间的关系网络形象化 我的数据如下所示: let networkData = [ ["John","Dylan","Brian"], ["Dylan","Brian"], ]; let networkMatrix.links = [ {source: "John", target: "Dylan", weight: 1}, {source: "John", target: "Brian", weight: 1}, {source: "Br

我想把人与人之间的关系网络形象化

我的数据如下所示:

let networkData = [
    ["John","Dylan","Brian"],
    ["Dylan","Brian"],
];
let networkMatrix.links = [
    {source: "John",  target: "Dylan", weight: 1},
    {source: "John",  target: "Brian", weight: 1},
    {source: "Brian", target: "Dylan", weight: 2}
];
我想要这样的输出:

let networkData = [
    ["John","Dylan","Brian"],
    ["Dylan","Brian"],
];
let networkMatrix.links = [
    {source: "John",  target: "Dylan", weight: 1},
    {source: "John",  target: "Brian", weight: 1},
    {source: "Brian", target: "Dylan", weight: 2}
];
约翰和布赖恩共用一组,所以他们的体重是1。约翰和迪伦也是如此。迪伦和布赖恩分为两组,他们的关系权重为2

现在我想我需要帮助。我的方法是遍历
networkData
的每一行,然后遍历数组的每个元素。对于每个元素,检查后面的所有元素,并在
networkMatrix
中增加它们的分数。这是我的密码

var i = 0, j = 0;
networkData.map(function(d) {
    d.forEach(function(val, ind, tab) {
        for (let k = ind + 1; k < tab.length; k++) {
            while ((i = networkMatrix.person1.indexOf(val, i + 1)) != -1) {
                while ((j = networkMatrix.person2.indexOf(tab[k], j + 1)) != -1) {
                    if (i === j) {
                        networkMatrix.score[i]++;
                    }
                }
            }
        }
    })
});
var i=0,j=0;
networkData.map(函数(d){
d、 forEach(函数(val、ind、tab){
for(设k=ind+1;k
下面是一个JSFIDLE:

正如您所看到的,它甚至不适用于JSFIDLE。但它或多或少在我的电脑上工作,我不知道为什么:


如果你觉得这对这么简单的任务来说太复杂了,有人能告诉我一些如何摆脱困境的方法吗?

你可以这样做:

    只考虑源对字母小于目标的名称对。
  • 构建一个由源键控的映射,并为每个映射构建一个由目标键控的嵌套映射,并为这些嵌套键分配一个计数器。您可以使用ES6
    Map
    ,或者使用普通对象
常量组=[
[“约翰”、“迪伦”、“布赖恩”],
[“迪伦”,“布莱恩”],
[“约翰”、“凯特”]
],
//获取唯一的名称列表
名称=[…新集合([].concat(…组))],
//创建计数器设置为零的二维贴图
map=newmap(names.map(name=>[name,newmap(names.map(name2=>[name2,0])))),
结果=[];
//数对
for(组的常量组){
for(组的常量源){
const targetMap=map.get(源);
for(组E的常量目标){
if(source

.as控制台包装{max height:100%!重要;top:0;}
有多少组?请注意,您的演示文稿中有拼写错误,任何数量的组都有,是的,很可能在1-100之间。我会更正打字错误。什么是
分数
?两个人出现在同一组中的次数。真的不清楚你打算如何想象这一点。预期的数据结构实际上没有多大意义