JS调用D3处理JSON数据时报data.sort is not a function错误咨询
报错根因
data.sort is not a function 报错的本质是:sort 是JavaScript数组专属的方法,你通过d3.json读取到的importedData不是数组类型,因此无法调用该方法。
排查&解决步骤
- 先打开你代码里注释掉的
console.log(importedData),运行后在浏览器控制台查看输出的实际数据结构:
绝大多数这类问题都是JSON文件的根节点不是数组,而是外层嵌套了一层对象,比如{ "data": [{},{}...] }的格式,你直接把外层对象赋值给data变量自然没法调用数组方法。 - 打开你的
data/data.json文件确认结构:
如果你当前的JSON结构是外层包裹对象的格式,比如下面的示例:
只要把代码里{ "status": "success", "greekData": [ {"greekName": "宙斯", "greekSearchResults": 12900}, {"greekName": "波塞冬", "greekSearchResults": 8700} ] }var data = importedData;改成对应取数组的逻辑即可,比如上面的示例就改成var data = importedData.greekData; - 可以额外加一层类型校验,避免结构异常时报错中断运行:
var data = importedData; // 校验取值是否为数组,不是的话取对应嵌套字段或者赋值为空数组兜底 if (!Array.isArray(data)) { data = importedData.greekData || importedData.result || []; }
其他可能情况
如果确认JSON结构是根数组,就检查JSON文件有没有语法错误:比如末尾多余逗号、引号不匹配、非法字符,都会导致d3解析JSON结果异常,拿到非数组的返回值。
内容的提问来源于stack exchange,提问作者Melissa W
相关产品推荐
相关产品推荐

