Files
Superalgos/AggregatedOrdersArray.js
T
2018-02-14 13:00:19 +01:00

121 lines
2.4 KiB
JavaScript

function newAggregatedOrdersArray() {
/* This object generates an array of orders that are aggregated by Amount A. */
var aggregatedOrdersArray = {
eventHandler: undefined,
addOrder: addOrder,
removeOrder: removeOrder,
setSortOrder: setSortOrder,
initialize: initialize
};
var array = [];
var sortOrder = 'ascending';
aggregatedOrdersArray.eventHandler = newEventHandler();
return aggregatedOrdersArray;
function initialize() {
this.eventHandler.initialize();
}
function addOrder(order) {
var wasAdded = false;
for (var i = 0; i < array.length; i++) {
var currentItem = array[i];
if (currentItem.rate === order.rate) {
currentItem.amountSum = currentItem.amountSum + order.amountA;
wasAdded = true;
}
}
if (wasAdded === false) {
var newItem = {
rate: order.rate,
amountSum: order.amountA
};
array.push(newItem);
}
applySortOrder();
aggregatedOrdersArray.eventHandler.raiseEvent('Array Changed', array);
}
function removeOrder(order) {
for (var i = 0; i < array.length; i++) {
var currentItem = array[i];
if (currentItem.rate === order.rate) { // We find the item in the array where the rate is the same as the orders rate.
currentItem.amountSum = currentItem.amountSum - order.amountA;
if (currentItem.amountSum === 0) { // If we reach zero, then there is no reason to keep this element in the array.
array.splice(i, 1); // This means remove this item from the array.
}
}
}
applySortOrder();
aggregatedOrdersArray.eventHandler.raiseEvent('Array Changed', array);
}
function setSortOrder(newSortOrder) {
sortOrder = newSortOrder;
applySortOrder();
aggregatedOrdersArray.eventHandler.raiseEvent('Array Changed', array);
}
function applySortOrder() {
array.sort(compare);
}
function compare(itemA, itemB) {
if (sortOrder === 'ascending') {
return itemA.rate - itemB.rate;
}
if (sortOrder === 'descending') {
return itemB.rate - itemA.rate;
}
return undefined;
}
}