87 lines
2.1 KiB
Java
87 lines
2.1 KiB
Java
var ArrayUtil = {
|
|
merge: require('@antv/util/lib/array/merge'),
|
|
values: require('@antv/util/lib/array/values-of-key')
|
|
};
|
|
|
|
var group = require('@antv/util/lib/group');
|
|
|
|
var each = require('@antv/util/lib/each');
|
|
|
|
module.exports = {
|
|
/**
|
|
* @protected
|
|
* @override
|
|
*/
|
|
processAdjust: function processAdjust(dataArray) {
|
|
var self = this;
|
|
var mergeData = ArrayUtil.merge(dataArray);
|
|
var dodgeDim = self.dodgeBy;
|
|
var adjDataArray = dataArray;
|
|
|
|
if (dodgeDim) {
|
|
// 如果指定了分组dim的字段
|
|
adjDataArray = group(mergeData, dodgeDim);
|
|
}
|
|
|
|
self.cacheMap = {};
|
|
self.adjDataArray = adjDataArray;
|
|
self.mergeData = mergeData;
|
|
self.adjustData(adjDataArray, mergeData);
|
|
self.adjDataArray = null;
|
|
self.mergeData = null;
|
|
},
|
|
getDistribution: function getDistribution(dim) {
|
|
var self = this;
|
|
var dataArray = self.adjDataArray;
|
|
var cacheMap = self.cacheMap;
|
|
var map = cacheMap[dim];
|
|
|
|
if (!map) {
|
|
map = {};
|
|
each(dataArray, function (data, index) {
|
|
var values = ArrayUtil.values(data, dim);
|
|
|
|
if (!values.length) {
|
|
values.push(0);
|
|
}
|
|
|
|
each(values, function (val) {
|
|
if (!map[val]) {
|
|
map[val] = [];
|
|
}
|
|
|
|
map[val].push(index);
|
|
});
|
|
});
|
|
cacheMap[dim] = map;
|
|
}
|
|
|
|
return map;
|
|
},
|
|
adjustDim: function adjustDim(dim, values, data, frameCount, frameIndex) {
|
|
var self = this;
|
|
var map = self.getDistribution(dim);
|
|
var groupData = self.groupData(data, dim); // 根据值分组
|
|
|
|
each(groupData, function (group, key) {
|
|
key = parseFloat(key);
|
|
var range;
|
|
|
|
if (values.length === 1) {
|
|
range = {
|
|
pre: values[0] - 1,
|
|
next: values[0] + 1
|
|
};
|
|
} else {
|
|
range = self.getAdjustRange(dim, key, values);
|
|
}
|
|
|
|
each(group, function (record) {
|
|
var value = record[dim];
|
|
var valueArr = map[value];
|
|
var valIndex = valueArr.indexOf(frameIndex);
|
|
record[dim] = self.getDodgeOffset(range, valIndex, valueArr.length);
|
|
});
|
|
});
|
|
}
|
|
}; |