(gd, trace, groupings, aggregation)
| 248 | }; |
| 249 | |
| 250 | function aggregateOneArray(gd, trace, groupings, aggregation) { |
| 251 | if(!aggregation.enabled) return; |
| 252 | |
| 253 | var attr = aggregation.target; |
| 254 | var targetNP = Lib.nestedProperty(trace, attr); |
| 255 | var arrayIn = targetNP.get(); |
| 256 | var conversions = Axes.getDataConversions(gd, trace, attr, arrayIn); |
| 257 | var func = getAggregateFunction(aggregation, conversions); |
| 258 | |
| 259 | var arrayOut = new Array(groupings.length); |
| 260 | for(var i = 0; i < groupings.length; i++) { |
| 261 | arrayOut[i] = func(arrayIn, groupings[i]); |
| 262 | } |
| 263 | targetNP.set(arrayOut); |
| 264 | |
| 265 | if(aggregation.func === 'count') { |
| 266 | // count does not depend on an input array, so it's likely not part of _arrayAttrs yet |
| 267 | // but after this transform it most definitely *is* an array attribute. |
| 268 | Lib.pushUnique(trace._arrayAttrs, attr); |
| 269 | } |
| 270 | } |
| 271 | |
| 272 | function getAggregateFunction(opts, conversions) { |
| 273 | var func = opts.func; |
no test coverage detected
searching dependent graphs…