(function(factory) { "use strict"; if (typeof define === 'function' && define.amd) { define(['jquery'], factory); } else if (window.jQuery && !window.jQuery.fn.ProxyMapper) { factory(window.jQuery); } } (function($) { 'use strict'; var ProxyMapper = function(mapping, data, options) { this.mapping = mapping; this.data = data; this._default_options = { fillValue: 0 }; this.options = $.extend({}, this._default_options, options); //this.result = { // dates: [], //}; this.result = {}; //for (var k in this.mapping) { // this.result[k] = []; //} this.result.dates = []; this.mappingDate = {}; this.perform_mapping(); return this.result; }; ProxyMapper.prototype = { constructor: ProxyMapper, perform_mapping: function(data) { console.log(this.mapping); if (this.mapping.dates.length > 0) { this.c_dates(this.data, this.mapping.dates); // probe and fetch all dates } if (this.mapping.labels.length > 0) { this.c_labels(this.data, this.mapping.labels); // probe and fetch all labels } if (this.mapping.labels.length > 0 && this.mapping.values.length > 0) { this.c_values(this.data, this.mapping.labels); // fetch values and overwrite default values } }, c_dates: function(intermediate, instructions) { var that = this; var matchingFun = function (intermediate, instructions, additionalData) { let index = instructions; let val = intermediate[index]; that.mappingDate[val] = that.result['dates'].length; that.result['dates'].push(val); }; this.iter(intermediate, instructions, matchingFun, {}); }, c_labels: function(intermediate, instructions, valuesLength) { var that = this; var matchingFun = function (intermediate, instructions, additionalData) { let index = instructions; let label = intermediate[index]; let val = []; for (var i=0; i