123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /**
- * Push items and count them
- */
- function collection() {
- /* jshint validthis: true */
- this.items = {};
- }
- collection.prototype = {
- push: function(item) {
- if (typeof this.items[item] === 'undefined') {
- this.items[item] = {
- cnt: 1
- };
- } else {
- this.items[item].cnt++;
- }
- },
- sort: function() {
- var newItems = {},
- sortedKeys;
- // sort in descending order (by cnt)
- sortedKeys = Object.keys(this.items).sort((function(a, b) {
- return this.items[b].cnt - this.items[a].cnt;
- }).bind(this));
- // build new items dictionary
- sortedKeys.forEach(function(key) {
- newItems[key] = this.items[key];
- }, this);
- this.items = newItems;
- return this;
- },
- forEach: function(callback) {
- Object.keys(this.items).forEach(function(key) {
- callback(key, this.items[key].cnt);
- }, this);
- },
- has: function(item) {
- return (typeof this.items[item] !== 'undefined');
- },
- getLength: function() {
- return Object.keys(this.items).length;
- }
- };
- module.exports = collection;
|