Skip to content

Commit 979ddea

Browse files
committed
filter points cascading simplification
1 parent caf707e commit 979ddea

File tree

2 files changed

+14
-27
lines changed

2 files changed

+14
-27
lines changed

src/transforms/filter.js

+9-22
Original file line numberDiff line numberDiff line change
@@ -205,34 +205,21 @@ exports.calcTransform = function(gd, trace, opts) {
205205
// copy all original array attribute values, and clear arrays in trace
206206
forAllAttrs(initFn);
207207

208-
// loop through filter array, fill trace arrays if passed
209-
210208
var prevTransforms = trace.transforms.filter(function(tr) {return tr.indexToPoints;});
209+
var originalPointsAccessor = prevTransforms.length ?
210+
function(i) {return prevTransforms[prevTransforms.length - 1].indexToPoints[i];} :
211+
function(i) {return [i];};
211212

212-
if(prevTransforms.length > 0) {
213-
214-
var prevTransform = prevTransforms[prevTransforms.length - 1];
215-
var prevIndexToPoints = prevTransform.indexToPoints;
216-
217-
for(var i = 0; i < len; i++) {
218-
var passed = filterFunc(targetArray[i]);
219-
if(passed) {
220-
forAllAttrs(fillFn, i);
221-
indexToPoints[index++] = prevIndexToPoints[i];
222-
}
223-
}
224-
} else {
225-
for(var i = 0; i < len; i++) {
226-
var passed = filterFunc(targetArray[i]);
227-
if(passed) {
228-
forAllAttrs(fillFn, i);
229-
indexToPoints[index++] = [i];
230-
}
213+
// loop through filter array, fill trace arrays if passed
214+
for(var i = 0; i < len; i++) {
215+
var passed = filterFunc(targetArray[i]);
216+
if(passed) {
217+
forAllAttrs(fillFn, i);
218+
indexToPoints[index++] = originalPointsAccessor(i);
231219
}
232220
}
233221

234222
opts.indexToPoints = indexToPoints;
235-
console.log(indexToPoints)
236223
};
237224

238225
function getFilterFunc(opts, d2c, targetCalendar) {

test/jasmine/tests/transform_filter_test.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ describe('filter transforms calc:', function() {
143143
expect(out[0].x).toEqual([0, 1]);
144144
expect(out[0].y).toEqual([1, 2]);
145145
expect(out[0].z).toEqual(['2016-10-21', '2016-12-02']);
146-
expect(out[0].transforms[0].indexToPoints).toEqual({0: [3], 1 :[4]});
146+
expect(out[0].transforms[0].indexToPoints).toEqual({0: [3], 1: [4]});
147147
});
148148

149149
it('should use the calendar from the target attribute if target is a string', function() {
@@ -262,7 +262,7 @@ describe('filter transforms calc:', function() {
262262
expect(out[0].x).toEqual([-2, 2, 3]);
263263
expect(out[0].y).toEqual([3, 3, 1]);
264264
expect(out[0].marker.color).toEqual([0.3, 0.3, 0.4]);
265-
expect(out[0].transforms[0].indexToPoints).toEqual({0: [2], 1 :[5], 2: [6]});
265+
expect(out[0].transforms[0].indexToPoints).toEqual({0: [2], 1: [5], 2: [6]});
266266
});
267267

268268
it('filters should handle array on base trace attributes', function() {
@@ -316,8 +316,8 @@ describe('filter transforms calc:', function() {
316316

317317
expect(out[0].x).toEqual([1, 2]);
318318
expect(out[0].y).toEqual([2, 3]);
319-
expect(out[0].transforms[0].indexToPoints).toEqual({0: [4], 1 :[5], 2: [6]});
320-
expect(out[0].transforms[1].indexToPoints).toEqual({0: [4], 1 :[5]});
319+
expect(out[0].transforms[0].indexToPoints).toEqual({0: [4], 1: [5], 2: [6]});
320+
expect(out[0].transforms[1].indexToPoints).toEqual({0: [4], 1: [5]});
321321
});
322322

323323
it('filters should chain as AND (case 2)', function() {
@@ -343,7 +343,7 @@ describe('filter transforms calc:', function() {
343343

344344
expect(out[0].x).toEqual([3]);
345345
expect(out[0].y).toEqual([1]);
346-
expect(out[0].transforms[0].indexToPoints).toEqual({0: [4], 1 :[5], 2: [6]});
346+
expect(out[0].transforms[0].indexToPoints).toEqual({0: [4], 1: [5], 2: [6]});
347347
expect(out[0].transforms[2].indexToPoints).toEqual({0: [6]});
348348
});
349349

0 commit comments

Comments
 (0)