我正在使用ajax中的数据创建交叉过滤器维度。创建尺寸变量的正确方法是什么?
var url = "http://" + window.location.host + "/twitter-data";
$.ajax({
url: url,
async: false,
success: function(data) {
makeGraphs(data);
}
});
function makeGraphs(records){
var dateFormat = d3.time.format("%Y-%m-%dT%H:%M:%S+%H:%M");
var data = records.map(obj => {
var res = dateFormat.parse(obj._source.published)
return res;
});
console.log(data[0]);
//Crossfilter
var ndx = crossfilter(data);
var all = ndx.groupAll
//Dimensions
var hashtagDim = ndx.dimension( function (d) {return d.hashtags; }, true);
'
控制台上的错误如下:
未捕获的RangeError:超出了最大调用堆栈大小
在quicksort(crossfilter.js:172)
排序(crossfilter.js:169)
它会像这样继续。
代码段的最后一行会产生错误。我已经看到解决方案说这是一个递归函数调用,但是我不确定为避免此错误需要更改代码。
答案 0 :(得分:2)
您确定数据元素上有一个“ hashtag”属性吗?
很常见,当我使用交叉过滤器遇到相同的错误时,这是因为我一直试图使用不存在的属性注册维度(即,值函数返回undefined
)。由于属性区分大小写,因此对属性使用错误的大小写也会导致返回undefined
返回值。
通常,维度(或组)值函数可能永远不会返回NaN
,undefined
或null
:Natural ordering of dimension and group values。
可能的根本原因是,如果您在AJAX请求完成之前就启动了交叉过滤器。但这只是猜测,因为我对您的代码不够了解。