* @private
*/
_getStacks(last, dataIndex) {
- const meta = this._cachedMeta;
- const iScale = meta.iScale;
- const metasets = iScale.getMatchingVisibleMetas(this._type);
+ const {iScale} = this._cachedMeta;
+ const metasets = iScale.getMatchingVisibleMetas(this._type)
+ .filter(meta => meta.controller.options.grouped);
const stacked = iScale.options.stacked;
- const ilen = metasets.length;
const stacks = [];
- let i, item;
- for (i = 0; i < ilen; ++i) {
- item = metasets[i];
+ const skipNull = (meta) => {
+ const parsed = meta.controller.getParsed(dataIndex);
+ const val = parsed && parsed[meta.vScale.axis];
- if (!item.controller.options.grouped) {
- continue;
+ if (isNullOrUndef(val) || isNaN(val)) {
+ return true;
}
+ };
- if (typeof dataIndex !== 'undefined') {
- const val = item.controller.getParsed(dataIndex)[
- item.controller._cachedMeta.vScale.axis
- ];
-
- if (isNullOrUndef(val) || isNaN(val)) {
- continue;
- }
+ for (const meta of metasets) {
+ if (dataIndex !== undefined && skipNull(meta)) {
+ continue;
}
// stacked | meta.stack
// false | x | x | x
// true | | x |
// undefined | | x | x
- if (stacked === false || stacks.indexOf(item.stack) === -1 ||
- (stacked === undefined && item.stack === undefined)) {
- stacks.push(item.stack);
+ if (stacked === false || stacks.indexOf(meta.stack) === -1 ||
+ (stacked === undefined && meta.stack === undefined)) {
+ stacks.push(meta.stack);
}
- if (item.index === last) {
+ if (meta.index === last) {
break;
}
}