blob: 860729e9f923b7b84d74a58ff7e9304ce7b3679f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import { BigNumber } from '@0x/utils';
export interface GenericRawOrder {
price: string;
amount: string;
}
/**
* Aggregates individual orders by price point. Filters zero amount orders.
* @param rawOrders An array of objects that have price and amount information.
*/
export function aggregateOrders(rawOrders: GenericRawOrder[]): Array<[string, BigNumber]> {
const aggregatedOrders = new Map<string, BigNumber>();
rawOrders.forEach(order => {
const amount = new BigNumber(order.amount);
if (amount.isZero()) {
return;
}
// Use string instead of BigNum to aggregate by value instead of variable.
// Convert to BigNumber first to consolidate different string
// representations of the same number. Eg. '0.0' and '0.00'.
const price = new BigNumber(order.price).toString();
const existingAmount = aggregatedOrders.get(price) || new BigNumber(0);
aggregatedOrders.set(price, amount.plus(existingAmount));
});
return Array.from(aggregatedOrders.entries());
}
|