You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从JSON构建集合数组绘制韦恩图时出现size未定义错误排查

问题:从JSON重构韦恩图数据数组时出现size未定义错误

场景重现

直接在JS中显式定义集合数组时,韦恩图能正常渲染:

var sets = [ {sets: ['A'], size: 12}, 
             {sets: ['B'], size: 12},
             {sets: ['A','B'], size: 2}];

// 创建韦恩图,放置在id为matrix_venn的div中
var chart = venn.VennDiagram()
d3.select("#matrix_venn").datum(sets).call(chart);

但从JSON文件读取数据并重构数组时,抛出错误:Uncaught TypeError: Cannot read properties of undefined (reading 'size')。

JSON文件(matrix_breakdown.json)内容:

{
    "A": 12,
    "B": 12,
    "A, B": 2
}

重构数组的代码:

// 导入包含矩阵计数的json文件
import data from './matrix_breakdown.json' assert { type: 'json' };

// 创建数组,用于存放集合名称和大小的字典
var sets = [];
for (let set in data) {
    // 将集合名称拆分为列表
    var set_split = set.split(',');

    // 获取集合的数量(size)
    var set_size = Number(data[set]);

    // 创建要添加到sets数组的字典
    var dict = {};
    dict['sets'] = set_split;
    dict['size'] = set_size;

    // 将字典添加到数组
    sets.push(dict);
}

// 创建韦恩图,放置在id为matrix_venn的div中
var chart = venn.VennDiagram()
d3.select("#matrix_venn").datum(sets).call(chart);

页面HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="matrix_venn"></div>
</body>

<!-- 导入d3 -->
<script src="https://d3js.org/d3.v4.min.js"></script>

<!-- 导入韦恩图模块 -->
<script src="./venn/venn.js"></script>

<!-- 导入绘图代码 -->
<script type="module" src="./matrix_venn.js"></script>

</html>

问题原因

表面上重构后的数组和直接定义的数组一致,但实际拆分"A, B"时,split(',')会得到['A', ' B']——第二个元素' B'带有前置空格。venn.js会将集合名称作为唯一标识,带空格的' B'和直接定义的'B'被视为两个不同集合,导致库在计算集合关系时无法匹配到对应数据,进而触发size属性未定义的错误。

解决方案

拆分集合名称后,对每个元素进行首尾空格去除处理,修改重构代码中的set_split行:

var set_split = set.split(',').map(item => item.trim());

修改后,"A, B"会被正确拆分为['A', 'B'],和直接定义的数组结构完全一致,venn.js就能正常识别集合并读取size属性,渲染出预期的韦恩图。

内容的提问来源于stack exchange,提问作者eigenVector5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 14:10:24